模板函数
写一个max,求两个东西中较大的一个。
1 int max(int a, int b) {
2 return a>b?a:b;
3 }
4
5 double max(double a, double b) {
6 return a>b?a:b;
7 }
8
9 string max(string a, string b) {
10 return a>b?a:b;
11 }
它们的算法都是类似的,只是参与运算的对象的类型不同。我们可以把类型定义成一个参数:
1 template<class T>
2 T max(T a, T b) {
3 return a>b?a:b;
4 }
调用方法
1 int main() {
2 cout << max(5, 7);
3 cout << max(5.5, 7.5);
4 cout << max(5, 7.5);
5 cout << max(static_cast<double>(5), 7.5);
6 cout << max<int>(5, 7.5);
7 cout << max<double>(5, 7.5);
8 }
调用时会自动对模板函数的类型进行推导。前面这个模板还不能对两个C字符串进行比较,比如
1 int main() {
2 cout << max("world", "hello");
3 }
可以对函数进行重载
1 char *max(char *a, char *b) {
2 return strcmp(a,b)>0?a:b;
3 }
练习:写一个abs类,可以计算任意类型的数的绝对值
CategoryCpp