第58课 类模板的概念和意义
Posted wanmeishenghuo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第58课 类模板的概念和意义相关的知识,希望对你有一定的参考价值。
思考:
在C++中能否将泛型的思想应用到类呢?
类模板:
类模板的应用:
实验:
1 #include <iostream> 2 #include <string> 3 4 using namespace std; 5 6 template < typename T > 7 class Operator 8 { 9 public: 10 T add(T a, T b) 11 { 12 return a + b; 13 } 14 T minus(T a, T b) 15 { 16 return a - b; 17 } 18 T multiply(T a, T b) 19 { 20 return a * b; 21 } 22 T divide(T a, T b) 23 { 24 return a / b; 25 } 26 }; 27 28 string operator-(string& l, string& r) 29 { 30 return "Minus"; 31 } 32 33 int main() 34 { 35 Operator<int> op1; 36 37 cout << op1.add(1, 2) << endl; 38 39 Operator<string> op2; 40 41 cout << op2.add("D.T.", "Software") << endl; 42 cout << op2.minus("D.T", "Software") << endl; 43 44 return 0; 45 }
运行结果如下:
编译器编译到16行发现两个string类型相减,而string类本身不支持这种相减操作,于是编译器去找string类型减法的重载,于是找到了28行的函数,最终编译成功,执行时也调用到了28行的重载函数。
类模板的工程应用:
这三条是工程的惯用规则。
示例:
Operator.h
1 #ifndef _OPERATOR_H_ 2 #define _OPERATOR_H_ 3 4 template < typename T > 5 class Operator 6 { 7 public: 8 T add(T a, T b); 9 T minus(T a, T b); 10 T multiply(T a, T b); 11 T divide(T a, T b); 12 }; 13 14 template < typename T > 15 T Operator<T>::add(T a, T b) 16 { 17 return a + b; 18 } 19 20 21 template < typename T > 22 T Operator<T>::minus(T a, T b) 23 { 24 return a - b; 25 } 26 27 28 template < typename T > 29 T Operator<T>::multiply(T a, T b) 30 { 31 return a * b; 32 } 33 34 35 template < typename T > 36 T Operator<T>::divide(T a, T b) 37 { 38 return a / b; 39 } 40 41 #endif
main.c
1 #include <iostream> 2 #include <string> 3 #include "Operator.h" 4 5 using namespace std; 6 7 8 int main() 9 { 10 Operator<int> op1; 11 12 cout << op1.add(1, 2) << endl; 13 cout << op1.multiply(4, 5) << endl; 14 cout << op1.minus(5, 6) << endl; 15 cout << op1.divide(10, 5) << endl; 16 17 return 0; 18 }
放到类模板外部定义成员函数时,依然要加上template这一行。
运行结果:
小结:
以上是关于第58课 类模板的概念和意义的主要内容,如果未能解决你的问题,请参考以下文章