cpp10-模板与泛型编程.ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:35 大小:2MB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

cpp10-模板与泛型编程.ppt

cpp10-模板与泛型编程.ppt

预览

免费试读已结束,剩余 25 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

计算机学院计算机网络与信息安全研究室张荣博第9章模板与泛型编程模板的概念提出问题解决方法分析问题typedefintDataType;voidswap(DataType&a,DataType&b){DataTypetmp;tmp=a;a=b;b=tmp;}模板的定义函数模板与模板函数模板函数例题cout<<"Themaxofi,jis:"<<max(i,j)<<endl;当编译器遇到max(i,j)时,生成函数名max(int,int):用模板实参int将类型参数T进行了实例化。cout<<"Themaxofx1,y1is:"<<max(x1,x2)<<endl;当编译器遇到max(x1,x2)时,生成函数名max(float,float):用模板实参float将类型参数T进行了实例化。cout<<"Themaxofx2,y2is:"<<max(y1,y2)<<endl;当编译器遇到max(y1,y2)时,生成函数名max(double,double):max(y1,y2)用模板实参double将类型参数T进行了实例化因此,上例中max函数可以用显式模板类型的方法写成下面的形势:voidmain(){inti=10,j=56;floatx1=50.34f,x2=56.34f;doubley1=673.36,y2=465.972;cout<<"Themaxofi,jis:“<<max<int>(i,j)<<endl;cout<<"Themaxofx1,y1is:“<<max<float>(x1,x2)<<endl;cout<<"Themaxofx2,y2is:“<<max<double>(y1,y2)<<endl;}模板参数表:是由若干个模板参数组成的。各参数间用逗号隔开,每个模板参数均是由类型参数和参数说明两部分,而类型参数指的是class标识符。例如:template<classT1,classT2,classT3>//模板声明T1fun(T2x,T3y){……..}注意:一般用T作为模板参数标识符,T代表任意类型。但实质上用任何字母都可以:如:template<classS>或template<classa>。类模板与模板类的概念类模板的定义template<classT>//声明一个类模板classclassname{intNo;Tvalue;public:TGetValue(){returnvalue;}voidSetValue(T&v){value=v;}};在类定义体外定义成员函数时,若此成员函数中有模板参数存在,则需在函数体外进行模板声明,并且在函数名前的类名后缀上”<T>”。template<classT>voidclassname<T>::SetValue(T&v){vulae=v;}template<classT>Tclassname<T>::GetValue(){returnvulae;}类模板的使用//举例定义类#include<iostream>usingnamespacestd;template<classT>//声明模板classnode{//定义结构模板Tval;//val取任意类型,即模板参数类型node<T>*next;//此处node为结构模板};template<classT>//声明模板classlist{//定义类模板node<T>*head;//此处node为结构模板intsize;public:list(){head=NULL;size=0;}boolinsert(Tval);voidprint();~list();};//定义成员函数,插入函数template<classT>boollist<T>::insert(Tx){node<T>*nodes=newnode<T>;if(nodes){nodes->val=x;nodes->next=head;head=nodes;size++;returntrue;}returnfalse;}//定义成员函数输出函数template<classT>voidlist<T>::print(){for(node<T>*p=head;p;p=p->next)cout<<p->val<<"";cout<<endl;}//析构函数template<classT>//声明模板list<T>::~list()//定义函数模板,其中list为类模板{node<T>*te