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