一.模板类的定义
函数模板可以用来创建一个通用功能的函数,以支持多种不同形参,进一步简化重载函数的函数体;
意义:对于功能完全一样,只是参数类型不同的函数,能写一段通用代码是用于多种不同的数据类型,使代码的可重用性大大提高,从而提高软件的开发效率,达到“一类多用”的目的。
1.1 定义
template <class T> //声明一个模板,虚拟类型名为T。注意:这里没有分号。 class Compare //类模板名为Compare { public : Compare(T a,T b){ x=a;y=b; } T max(){ return (x>y)?x:y; } T min(){ return (x<y)?x:y; } private : T x,y; };
1.2 模板类与普通类比较 [增加模版类声明+虚拟类型参数名T]
1.声明模板类时要增加一行
template <class 类型参数名>
template意思是“模板”,是声明类模板时必须写的关键字。在template后面的尖括号内的内容为模板的参数表列, 关键字class(也可以用typename)表示其后面的是类型参数。
2.固定的类型名更换成虚拟类型参数名T
在建立类对象时,如果将实际类型指定为int型,编译系统就会用int取代所有的T,如果指定为float型,就用float取代所有的T,这样就能实现“一类多用”。
1.3 模板类成员函数体外实现
template <class T> T Compare<T>::max( ) {//类型+作用域引用 return (x > y)? x : y; }
1.4 模版类实例化
Compare <int> cmp(4, 7); Compare <float> cmp(4.0, 7.0);
二.模板类的注意事项
1. 类模板的 类型参数可以有一个或多个,每个类型前面都必须加class,如:
template <class T1,class T2> class someclass { ... }; //*********** //在定义对象时分别代入实际的类型名 someclass<int, double> obj;
2. 和使用类一样,使用类模板时要 注意其作用域,只能在其有效作用域内用它定义对象。
3. 模板可以有层次, 一个类模板可以作为基类,派生出派生模板类。但有关这方面的知识实际应用较少。
标签:Compare,模版,c++,template,类型,class,模板 From: https://www.cnblogs.com/david-china/p/17211855.html