今天在写程序时感觉因为函数参数类型的问题而重复编逻辑相同的函数比较烦,遂翻书找到了模板,并整理了C++模板的简单使用方法。
c++模板有
函数模板和
类模板两种使用方法。
函数模板
定义
在函数前加上 template<class ElementType> 其中class为关键字 与可以为typename,ElementType为形式参数名,就是自己定义的名字。
需要多个形式参数名时这样: template <class T1,class T2>
使用
举个例子: template<class ElementType>
void Fun (ElementType a){ ElementType b=a; }
使用时:int a=2; Fun(a);
double b=2.0;Fun(b); 从而可以不必为类型问题而烦恼。
类模板
定义
与函数模板相似,也是以template开头,随后是用尖括号括起来的模板形式参数列表,每个形式参数之前都有关键字(class或者typename)标识
如 template<class ElementType> calss A{ ...};
如果成员函数不是在声明中定义,则成员函数要以template<class ElementType>开头,而且成员函数定义时,二元作用域运算符::之前的类名要用 类名<ElementType>,以此将成员函数的定义与类模板以及模板参数联系起来。
使用
在实例化类对象时,形式是:类名<参数类型> 对象名。
如若定义了一个类模板Stack,则在实例化时这样:Stack<int> intStack;
int 会取代ElementType。
其成员函数的使用和一般类一样。
注意
1.函数模板在使用时,编译器需要根据实在参数的类型来定义函数模板的实例,函数调用调用的就是实例化得到的模板函数。
2.类模板在使用时,编译器需要根据实在参数的类型来得到具体的类,这个具体的类称之为类模板实例(或模板类),类模板实例可以实例化对象。
3.模板虽然只编写一次,但是编译后的代码仍然包含了多个是实例化函数或者类的代码,所以模板不会减少编译后代码的量,但是很好地支持了软件的重用,以有利于软件的一致性维护。