标签:
9.3类模板
类模板用于实现类所需数据的类型参数化。
类模板在表示如数组、表、图等数据结构显得特别重要,这些数据结构的表示和算法不受所包含的元素类型的影响。
类模板声明的一般方法如下:
template<类模板参数>class 类名{//类体};
用类模板定义对象的一般格式如下:
类名<模板实例化参数类别>对象名(构造函数实参列表);
//类模板实际上对于使用不同的数据类型,但是操作方法一样的类的一种抽象
//类模板实现通用
1 #include <iostream> 2 3 //类模板实际上对于使用不同的数据类型,但是操作方法一样的类的一种抽象 4 //类模板实现通用 5 template <class T> 6 class com 7 { 8 public: 9 T a; 10 T b; 11 T add() 12 { 13 std::cout << typeid(T).name() << std::endl; 14 return a + b; 15 } 16 }; 17 18 void main() 19 { 20 com<int>comx; 21 22 comx.a = 19; 23 comx.b = 29; 24 25 std::cout << comx.add() << std::endl; 26 27 system("pause"); 28 }
//定义两种数据类型的类模板
//STL数据结构,算法,适用任何类型
1 #include <iostream> 2 #include <string> 3 4 //定义两种数据类型的类模板 5 //STL数据结构,算法,适用任何类型 6 template<class T1, class T2> 7 class myclass 8 { 9 public: 10 T1 t11; 11 T2 t22; 12 myclass(T1 t111, T2 t222) :t11(t111), t22(t222) 13 { 14 15 } 16 void print() 17 { 18 std::cout << t11 << " " << t22 << std::endl; 19 } 20 }; 21 22 void main() 23 { 24 myclass<int, double>my1(10, 20.8); 25 my1.print(); 26 27 myclass<double, std::string>my2(20.8, "123456abc"); 28 my2.print(); 29 30 system("pause"); 31 }
//类模板可以有一个默认的值,C++11
1 #include "myArray.h" 2 3 template<class T = int>//类模板可以有一个默认的值,C++11 4 myArray<T>::myArray() 5 { 6 std::cout << "构造" << typeid(T).name() << std::endl; 7 } 8 9 template<class T = int>//类模板可以有一个默认的值,C++11 10 myArray<T>::~myArray() 11 { 12 std::cout << "销毁" << typeid(T).name() << std::endl; 13 }
标签:
原文地址:http://www.cnblogs.com/denggelin/p/5671693.html