当先锋百科网

首页 1 2 3 4 5 6 7

函数重载和函数模板在应用中主要不同的是:若函数具备多种实现方式,则可以使用函数重载,将函数实例化,每份实例能够提供相同的通用服务。而如果程序主体代码不变,仅改变其中用到的数据类型,则可以使用函数模板来简化。
下面是针对max函数的函数重载和函数模板形式的简单实现:
函数重载:

#include<iostream>
#include<vector>
#include<string>

using namespace std;

//max函数重载
void max(int, int);
void max(float, float);
void max(string, string);
void max(vector<float>vec);

int main() {
	int a = 1;
	int b = 0;
	max(a, b);

	float m = 3.4;
	float n = 4.5;
	max(m, n);

	string s1, s2;
	s1 = "abcd";
	s2 = "cbfc";
	max(s1, s2);

	float arr[5] = { 1.2,2.3,3.2,4.0,6.3 };
	vector<float>vec(arr, arr + 5);
	max(vec);

	system("pause");
	return 0;

}

void max(int a, int b) {
	if (a > b) {
		cout << a << "大于" << b << endl;
	}
	else if (a == b) {
		cout << a << "等于" << b << endl;
	}
	else
		cout << b << "大于" << a << endl;
}

void max(float a, float b) {
	if (a > b) {
		cout << a << "大于" << b << endl;
	}
	else if (a == b) {
		cout << a << "等于" << b << endl;
	}
	else
		cout << b << "大于" << a << endl;
}

void max(string a, string b) {
	if (a > b) {
		cout << a << "大于" << b << endl;
	}
	else if (a == b) {
		cout << a << "等于" << b << endl;
	}
	else
		cout << b << "大于" << a << endl;
}

void max(vector<float>vec) {
	float max_elem = 0;
	for (int ix = 0; ix < vec.size(); ++ix) {
		if (max_elem < vec[ix]) {
			max_elem = vec[ix];
		}
	}
	cout << "最大的元素是: " << max_elem << endl;
}

运行结果:
在这里插入图片描述

函数模板形式:

#include<iostream>
#include<vector>
#include<string>

using namespace std;

//max函数模板声明,同时对参数个数不同的max函数模板使用重载
template <typename T>
void max(T a, T b);

template<typename T>
void max(const vector<T>vec);

int main() {
	int a = 1;
	int b = 0;
	max(a, b);

	float m = 3.4;
	float n = 4.5;
	max(m, n);

	string s1, s2;
	s1 = "abcd";
	s2 = "cbfc";
	max(s1, s2);

	float arr[5] = { 1.2,2.3,3.2,4.0,6.3 };
	vector<float>vec(arr, arr + 5);
	max(vec);

	system("pause");
	return 0;

}

template <typename T>
void max(T a, T b) {
	if (a > b) {
		cout << "max是" << a<<endl;
	}
	else if (a == b) {
		cout << a << "等于" << b<<endl;
	}
	else
		cout << "max是" << b<<endl;
}

template<typename T>
void max(const vector<T>vec) {
	T max_elem=0;
	for (int ix = 0; ix < vec.size(); ++ix) {
		if (max_elem < vec[ix])
			max_elem = vec[ix];
	}
	cout << "最大的元素是: " << max_elem << endl;
}

运行结果:
在这里插入图片描述