在定义函数的时候,只定义一种类别的函数在不同数据类型中被调用,显示的结果如下:
#include<iostream>
int maxValue(int a, int b) {
return a > b ? a : b;
}
int main() {
int a = 3, b = 9;
std::cout << "Max Value(Integer):" << maxValue(a, b) << std::endl;
float f1 = 3.5, f2 = 3.9;
std::cout << "Max Value(Float):" << maxValue(f1, f2) << std::endl;
char ch1 = 'c', ch2 = 'd';
std::cout << "Max Value(Char):" << maxValue(ch1, ch2) << std::endl;
}
我们可以看到,最后的结果都是整数的形式,因此一种函数的定义是不够的。
#include<iostream>
int maxValue(int a, int b) {
return a > b ? a : b;
}
float maxValue(float a, float b) {
return a > b ? a : b;
}
char maxValue(char a, char b) {
return a > b ? a : b;
}
int main() {
int a = 3, b = 9;
std::cout << "Max Value(Integer):" << maxValue(a, b) << std::endl;
float f1 = 3.5, f2 = 3.9;
std::cout << "Max Value(Float):" << maxValue(f1, f2) << std::endl;
char ch1 = 'c', ch2 = 'd';
std::cout << "Max Value(Char):" << maxValue(ch1, ch2) << std::endl;
}
重新添加定义函数后的结果如下:
我们会发现如果类别越多,定义的函数也越多,会显得比较累赘。
这时候使用函数模板template就表现的很方便了
代码如下:
#include<iostream>
/*
int maxValue(int a, int b) {
return a > b ? a : b;
}
float maxValue(float a, float b) {
return a > b ? a : b;
}
char maxValue(char a, char b) {
return a > b ? a : b;
}
*/
template<typename T> T maxValue(T a, T b) {
return a > b ? a : b;
}
int main() {
int a = 3, b = 9;
std::cout << "Max Value(Integer):" << maxValue(a, b) << std::endl;
float f1 = 3.5, f2 = 3.9;
std::cout << "Max Value(Float):" << maxValue(f1, f2) << std::endl;
char ch1 = 'c', ch2 = 'd';
std::cout << "Max Value(Char):" << maxValue(ch1, ch2) << std::endl;
}
然后我们还可以添加const和&表示引用,不是新的变量产生,const保证值不被修改
#include<iostream>
/*
int maxValue(int a, int b) {
return a > b ? a : b;
}
float maxValue(float a, float b) {
return a > b ? a : b;
}
char maxValue(char a, char b) {
return a > b ? a : b;
}
*/
template<typename T>
T maxValue(const T& a, const T& b) {
return a > b ? a : b;
}
int main() {
int a = 3, b = 9;
std::cout << "Max Value(Integer):" << maxValue<int>(a, b) << std::endl;
float f1 = 3.5, f2 = 3.9;
std::cout << "Max Value(Float):" << maxValue<float>(f1, f2) << std::endl;
char ch1 = 'c', ch2 = 'd';
std::cout << "Max Value(Char):" << maxValue<char>(ch1, ch2) << std::endl;
}