C++类模板简介
类模板:
是对一批仅仅成员数据类型不同的类的抽象,程序员只要为这一批类所组成的整个类家族创建一个类模板,给出一套程序代码,就可以用来生成多种具体的类,(这类可以看作是类模板的实例),从而大大提高编程的效率。
------百度百科
•格式:
类模板的写法:
template <class 类型参数1,class 类型参数2,...>//类型参数表
class 类模板名 {
成员函数和成员变量
};
类模板里成员函数的写法:
template <class 类型参数1,class 类型参数2,...>//类型参数表
返回值类型 类模板名 <类型参数名列表>::成员函数名(参数表) {
......
}
用类模板定义对象的写法:
类模板名 <真实类型参数表> 对象名(构造函数实参表)
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 template <class T1, class T2> 5 class Pair { 6 public: 7 T1 key; //关键字 8 T2 value; //值 9 Pair(T1 k, T2 v):key(k), value(v) { }; 10 bool operator < (const Pair<T1, T2> & p) const; 11 }; 12 template <class T1, class T2> 13 bool Pair<T1, T2>::operator <(const Pair<T1, T2> & p) const { 14 //Pair的成员函数 operator < 15 return key < p.key; 16 } 17 int main(void) 18 { 19 Pair<string, int> student("Tom", 19); 20 //实例化一个类 Pair<string, int> 21 cout << student.key << ends << student.value <<endl; //output:Tom 19 22 return 0; 23 }
• 编译器由类模板生成类的过程叫类模板的实例化。由类模板实例化得到的类,叫模板类。
•同一个类模板的两个模板类是不兼容的
Pair <string, int> * p;Pair <string, double> a;p = & a;//wrong
• 函数模板作为类模板成员
1 #include <iostream> 2 using namespace std; 3 template <class T> //类模板 4 class A { 5 public: 6 template <class T2> //成员函数模板 7 void Func(T2 t) { 8 cout << t; 9 } 10 }; 11 int main(void) 12 { 13 A<int> a; 14 a.Func('K'); //成员函数模板Func被实例化 15 a.Func("hello"); //成员函数模板Func再次被实例化 16 return 0; 17 } //output:Khello
• 类模板的“<类型参数表>”中可以出现非类型参数
template <class T, int size> class CArray { private: T array[size]; ...... }; CArray <double, > a2; CArray <int, > a3; //a2和a3属于不同的类
2018-01-2515:13:22
相关推荐
FORLIVEFORLIFE 2017-09-29
toontong 2010-02-04
abfdada 2010-02-04
风中清淡 2010-01-28
Masimaro 2013-02-23
wushengyong 2014-03-05
hcr 2008-01-31
软件设计 2017-04-02