1.对于类模板来说,其功能是相同的,但数据类型是不同的。 2.关于类模板的声明和类模板对象的声明方法。 类模板声明:template<class 类型参数名> 类模板对象的声明:类模板名<实际类型名> 对象名(参数表列) 3.代码示例:
#include<iostream> using namespace std; template<class numtype>//声明一个类模板 class Compare { public: Compare(numtype a, numtype b)//定义构造函数 { x = a; y = b; } numtype sum()//定义一个sum函数,用于求和,类型暂定为numtype { return x + y; } private: numtype x; numtype y; }; int main() { Compare<int>c1(6, 6);//定义int型对象 Compare<float>c2(6.5, 6.7);//定义float型对象 cout << c1.sum() << endl; cout << c2.sum() << endl; return 0; }4.上面的代码块中,成员函数实在类模板内定义的,如果要在类模板外定义成员函数,则需要用特殊形式的方法定义类模板外函数。 如: template<class 类型参数> 类型名 类模板名<类型名>::函数名() 代码示例如下:
#include<iostream> using namespace std; template<class numtype>//声明一个类模板 class Compare//定义一个类模板名 { public: Compare(numtype a, numtype b)//定义有个构造函数 { x = a; y = b; } numtype sum();//声明一个sum函数,返回类型为虚拟类型numtype private: numtype x; numtype y; }; template<class numtype>//在类外定义一个成员函数 numtype Compare<numtype>::sum() { return x + y; } int main() { Compare<int>c1(6, 6);//定义对象c1,并调用构造函数 Compare<float>c2(6.5, 6.7);//定义对象c2,并调用构造函数 cout << c1.sum() << endl; cout << c2.sum() << endl; return 0; }调试结果如下: 5.注意在类模板外定义一个成员函数时,别忘了声明类模板。 6.类模板的类型参数中的类型可以是两个以上,但每个类型前面都要加上class。