一个懒人专用文章归档神器,如果你不能成为压路机的一部分,那么你就只能成为道路的一部分 Bala~bala~

【C++】类模板(template)作用对比举例

C/C++ 懒人 1314℃ 0评论

一、类模板(template)

类模板是后期C++加入的一种可以大大提高编程效率的方法

关键字template

 

用法:

template <模板参数表>   —–>模板参数表一般格式为class (标识符)

class (类名)

{

//….

}

 

二、举个栗子

我们要写一个比较类,类里面有两个私有成员

在类里有求私有成员中的最大值和最小值的两个公有成员

用来判断两个数的大小

 

下面我们来进行有无类模板的比较

(1)不用类模板

代码块:

  1. class Compare
  2. {
  3.     public:
  4.         Compare(int a,int b)//构造函数,用于初始化
  5.         {
  6.             x = a;
  7.             y = b;
  8.         }
  9.         int max()//求较大值
  10.         {
  11.             return (x>y)?x:y;
  12.         }
  13.         int min()//求较小值
  14.         {
  15.             return (x<y)?x:y;
  16.         }
  17.     private:
  18.         int x;
  19.         int y;
  20. };

分析:

我们会发现,这个类只能用于比较整形的大小

比如3,5;调用max返回5,调用min返回3

但是如果比较的是浮点数,那就不可以了

(2)用类模板

代码块:

  1. template <class Type>
  2. class compare
  3. {
  4.     public:
  5.         compare(Type a,Type b)
  6.         {
  7.             x = a;
  8.             y = b;
  9.         }
  10.         Type max()
  11.         {
  12.             return (x>y)?x:y;
  13.         }
  14.         Type min()
  15.         {
  16.             return (x<y)?x:y;
  17.         }
  18.     private:
  19.         Type x;
  20.         Type y;
  21. };

分析:

通过对比发现,这两块代码差别并不是很大,仅仅是增加了关键字

还有类型Type替换之前的整型int

在main函数定义时,就可以定义不同类型的对象了

main函数代码:

  1. int main(void)
  2. {
  3.     compare<int> C1(3,5);
  4.     cout<<“最大值:”<<C1.max()<<endl;
  5.     cout<<“最小值:”<<C1.min()<<endl;
  6.     compare<float> C2(3.5,3.6);
  7.     cout<<“最大值:”<<C2.max()<<endl;
  8.     cout<<“最小值:”<<C2.min()<<endl;
  9.     compare<char> C3(‘a’,‘d’);
  10.     cout<<“最大值:”<<C3.max()<<endl;
  11.     cout<<“最小值:”<<C3.min()<<endl;
  12.     return 0;
  13. }

运行结果:

5
3
3.6
3.5
d
a

三、如何写一个将一个类转化为类模板

(1)写出一个类

(2)将类型需要改变的地方进行替换(如上面的Type)

(3)在类的前面加入关键字template以及函数参数表

(4)定义对象的格式     类名+<Type>+ xx(参数)

比如上面的compare<int> C1(3,5);

(5)切记,模板函数如果定义在类体外,需要在前面加上一行template <函数参数表>。并在类模板名后面用尖括号加上<虚拟函数参数>

比如

template<class Type>

Type compare <Type>::max()

{

//…..

}

转载请注明:懒人档案室 » 【C++】类模板(template)作用对比举例

喜欢 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址