C++ 共用模板 template

C++ 共用模板

小编学习了关于C++的公用模板。
两个类或者多个类的功能相同时,仅仅数据类型不同。

class Compare_int 
 { 
 public: 
 Compare(int a, int b) 
 {x=a;y=b;} 
 int max( ) 
 {return(x>y)?x:y;} 
 int min( ) 
 {return(x<y)?x:y;} 
 private: 
 int x,y; 
 }; 
class Compare_float 
 { 
 public: 
 Compare(float a,float b) 
 {x=a;y=b;} 
 float max( ) 
 {return(x>y)?x:y;} 
 float min( ) 
 {return(x<y)?x:y;} 
 private: 
 float x,y; 
 }

C++提供了一个通用类模板,他可有一个或者多个虚拟对象,对于两个类以上的对象可以申请下面的一个类。
关键字template作为声明
numtype作为虚拟参数

template <class numtype> //声明一个模板,虚拟类型名为 numtype 
class Compare //类模板名为 Compare 
 { 
 public: 
 Compare(numtype a, numtype b) 
 {x=a;y=b;} 
numtype max( ) 
 {return (x>y)?x:y;} 
numtype min( ) 
 {return (x<y)?x:y;} 
 private: 
numtype x,y; 
 };

这样就能实现“一类多用”。由于类模板包含类型参数,因此又称为参数化的类。如果说类是对象的抽象,对象是类的实例,则类模板是类的抽象,类是类模板的实例。利用类模板可以建立含各种数据类型的类。在声明了一个类模板后,怎样使用它?怎样使它变成一个实际的类?

必须用实际类型名去取代虚拟的类型,具体的做法是:

  Compare <int> cmp(4,7);

即在类模板名之后在尖括号内指定实际的类型名,在进行编译时,编译系统就用int取代类模板中的类型参数numtype,这样就把类模板具体化了,或者说实例化了。这时Compare就相当于前面介绍的Compare_int类。

再模板后的尖括号里面申明的数据类型,在进行编译时,编译系统就用括号中的类型代替 numtype,这样就把模板具体化了。

还有一个问题要说明: 上面列出的类模板中的成员函数是在类模板内定义的。如果改为在类模板外定义,不能用一般定义类成员函数的形式:

numtype Compare::max( ) {…} //不能这样定义类模板中的成员函数。

而应当写成类模板的形式:

template

numtype Compare::max( )

{return (x>y)?x:y;}

类模板的类型参数可以有一个或多个,每个类型前面都必须加class,如

template <class T1,class T2>

class someclass

{…};

今天先介绍这么多。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值