当前位置:  编程语言>c/c++

c++模板(Template)介绍及模板参数中包含模版

 
    发布时间:2013-10-20  


    本文导语:  c++模板定义:模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性。模版可以分为两类,一个是函数模版,另外一个是类模版。函数模版函数模板的...

   c++模板定义:模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性。模版可以分为两类,一个是函数模版,另外一个是类模版


函数模版

函数模板的一般形式如下:

Template <class或者也可以用typename T>

返回类型 函数名(形参表)

{//函数定义体 }

说明: template是一个声明模板的关键字,表示声明一个模板关键字class不能省略,如果类型形参多余一个 ,每个形参都要加class <类型 形参表>可以包含基本数据类型可以包含类型.

函数模板代码举例:

#include <iostream>
using std::cout;
using std::endl;
//声明一个函数模版,用来比较输入的两个相同数据类型的参数的大小,class也可以被typename代替,
//T可以被任何字母或者数字代替。
template <class T>
T min(T x,T y)
{ return(x<y)?x:y;}
void main( )
{
     int n1=2,n2=10;
     double d1=1.5,d2=5.6;
     cout<< "较小整数:"<<min(n1,n2)<<endl;
     cout<< "较小实数:"<<min(d1,d2)<<endl;
     system("PAUSE");
}


类模版

定义一个类模板:

Template < class或者也可以用typename T >

class类名{

//类定义......

};

说明:其中,template是声明各模板的关键字,表示声明一个模板,模板参数可以是一个,也可以是多个。

类模板什么时候会被实例化呢?

①当使用了类模板实例的名字,并且上下文环境要求存在类的定义时。

对象类型是一个类模板实例,当对象被定义时。此点被称作类的实例化点。

③一个指针引用指向一个类模板实例,当检查这个指针或引用所指的对象时。

类模板实例化示意图:

类模板代码举例:

文件: ClassTemplate.h

// ClassTemplate.h
#ifndef ClassTemplate_HH
#define ClassTemplate_HH
template<typename T1,typename T2>
class myClass{
private:
     T1 I;
     T2 J;
public:
     myClass(T1 a, T2 b);//Constructor
     void show();
};
//这是构造函数
//注意这些格式
template <typename T1,typename T2>
myClass<T1,T2>::myClass(T1 a,T2 b):I(a),J(b){}
//这是void show();
template <typename T1,typename T2>
void myClass<T1,T2>::show()
{
     cout<<"I="<<I<<", J="<<J<<endl;
}
#endif


文件:Test.cpp

// Test.cpp
#include <iostream>
#include "ClassTemplate.h"
using std::cout;
using std::endl;
void main()
{
     myClass<int,int> class1(3,5);
     class1.show();
     myClass<int,char> class2(3,"a");
     class2.show();
     myClass<double,int> class3(2.9,10);
     class3.show();
     system("PAUSE");
}

注意:

(1)如果在全局域中声明了与模板参数同名的变量,则该变量被隐藏掉。

(2)模板参数名不能被当作类模板定义中类成员的名字。

(3)同一个模板参数名在模板参数表中只能出现一次。

(4)在不同的类模板或声明中,模板参数名可以被重复使用。

(5)在类模板的前向声明和定义中,模板参数的名字可以不同。

(6)类模板参数可以有缺省实参,给参数提供缺省实参的顺序是先右后左。

(7)类模板名可以被用作一个类型指示符。当一个类模板名被用作另一个模板定义中的类型指示符时,必须指定完整的实参表。


模板类型参数中包含模版类型的代码举例如下:

template< template<typename T> class BaseT>
class HaveTemplateParams
{
public:
};
template <typename T>
class IamTemplateParams
{
};
HaveTemplateParams<IamTemplateParams> x;


  • 本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载,整理或搜集自网络.欢迎任何形式的转载,转载请注明出处.
    转载请注明:文章转载自:[169IT-IT技术资讯]
    本文标题:c++模板(Template)介绍及模板参数中包含模版
相关文章推荐:


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3