欢迎来到天天文库
浏览记录
ID:51489350
大小:1016.50 KB
页数:35页
时间:2020-03-24
《cpp10-模板与泛型编程.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、计算机学院计算机网络与信息安全研究室张荣博面向对象程序设计及C++第9章模板与泛型编程9.1模板概念(★)9.2函数模板9.3类模板9.4泛型编程(★)1模板的概念C++中常见的问题voidswap(int&a,int&b){inttmp=0;tmp=a;a=b;b=tmp;}//交换两个浮点数voidswap(float&a,float&b){floattmp=0.0;tmp=a;a=b;b=tmp;}intmain(){inta=10,b=20;floatc=1.2,d=2.4;cout<<“a=“<2、<“b=”<3、(DataType&a,DataType&b){DataTypetmp;tmp=a;a=b;b=tmp;}intmain(){inta=10,b=20;swap(a,b);return0;}4分析问题当需要交换两个浮点数时可以将DataType定义成float型数据即可。缺点:更改一种数据类型时,需要修改程序源代码,必须重新编译程序。无法解决的问题:如果程序中需要交换多种数据类型之间的数据该怎么办?5typedefintDataType;voidswap(DataType&a,DataType&b){DataT4、ypetmp;tmp=a;a=b;b=tmp;}intmain(){inta=10,b=20;floatc=1.2,d=2.4;swap(a,b);swap(c,d);return0;}能否将swap函数的形式参数,作为一种无类型的参数,当使用它的时候再将它用具体的参数实现?就像采用滞后捆绑实现多态一样!6模板的定义模板本质上就是参数化多态,是一种使用无类型参数来产生一系列函数或类的机制,是C++的一个重要特性。模板可以分为两类:函数模板类模板7函数模板与模板函数函数模板可以用来创建一个通用功能的函数,以支持多5、种不同形参,进一步简化重载函数的函数体设计。声明方法:template//模板声明Tmax(Tx,Ty)//定义函数模板{return(x>y)?x:y;}8模板函数max代表的是一类函数,是函数的集合;要用max进行真正的操作前,先要将模板参数T实例化为一般的类型(如int等);max是一个函数模板,将T实例化的参数称为模板实参,用模板实参实例化的函数称为模板函数。template//模板声明Tmax(Tx,Ty){return(x>y)?x:y;}9例题#include6、stream>usingnamespacestd;templateTmax(Tx,Ty){return(x>y)?x:y;}voidmain(){inti=10,j=56;floatx1=50.34f,x2=56.34f;doubley1=673.36,y2=465.972;cout<<"Themaxofi,jis:"<7、y1,y2)<8、;当编译器遇到max(y1,y2)时,生成函数名max(double,double):max(y1,y2)用模板实参double将类型参数T进行了实例化11因此,上例中max函数可以用显式模板类型的方法写成下面的形势:voidmain(){inti=10,j=56;floatx1=50.34f,x2=56.34f;doubley1=673.36,y2=465.972;cout<<"Th
2、<“b=”<
3、(DataType&a,DataType&b){DataTypetmp;tmp=a;a=b;b=tmp;}intmain(){inta=10,b=20;swap(a,b);return0;}4分析问题当需要交换两个浮点数时可以将DataType定义成float型数据即可。缺点:更改一种数据类型时,需要修改程序源代码,必须重新编译程序。无法解决的问题:如果程序中需要交换多种数据类型之间的数据该怎么办?5typedefintDataType;voidswap(DataType&a,DataType&b){DataT
4、ypetmp;tmp=a;a=b;b=tmp;}intmain(){inta=10,b=20;floatc=1.2,d=2.4;swap(a,b);swap(c,d);return0;}能否将swap函数的形式参数,作为一种无类型的参数,当使用它的时候再将它用具体的参数实现?就像采用滞后捆绑实现多态一样!6模板的定义模板本质上就是参数化多态,是一种使用无类型参数来产生一系列函数或类的机制,是C++的一个重要特性。模板可以分为两类:函数模板类模板7函数模板与模板函数函数模板可以用来创建一个通用功能的函数,以支持多
5、种不同形参,进一步简化重载函数的函数体设计。声明方法:template//模板声明Tmax(Tx,Ty)//定义函数模板{return(x>y)?x:y;}8模板函数max代表的是一类函数,是函数的集合;要用max进行真正的操作前,先要将模板参数T实例化为一般的类型(如int等);max是一个函数模板,将T实例化的参数称为模板实参,用模板实参实例化的函数称为模板函数。template//模板声明Tmax(Tx,Ty){return(x>y)?x:y;}9例题#include6、stream>usingnamespacestd;templateTmax(Tx,Ty){return(x>y)?x:y;}voidmain(){inti=10,j=56;floatx1=50.34f,x2=56.34f;doubley1=673.36,y2=465.972;cout<<"Themaxofi,jis:"<7、y1,y2)<8、;当编译器遇到max(y1,y2)时,生成函数名max(double,double):max(y1,y2)用模板实参double将类型参数T进行了实例化11因此,上例中max函数可以用显式模板类型的方法写成下面的形势:voidmain(){inti=10,j=56;floatx1=50.34f,x2=56.34f;doubley1=673.36,y2=465.972;cout<<"Th
6、stream>usingnamespacestd;templateTmax(Tx,Ty){return(x>y)?x:y;}voidmain(){inti=10,j=56;floatx1=50.34f,x2=56.34f;doubley1=673.36,y2=465.972;cout<<"Themaxofi,jis:"<7、y1,y2)<8、;当编译器遇到max(y1,y2)时,生成函数名max(double,double):max(y1,y2)用模板实参double将类型参数T进行了实例化11因此,上例中max函数可以用显式模板类型的方法写成下面的形势:voidmain(){inti=10,j=56;floatx1=50.34f,x2=56.34f;doubley1=673.36,y2=465.972;cout<<"Th
7、y1,y2)<8、;当编译器遇到max(y1,y2)时,生成函数名max(double,double):max(y1,y2)用模板实参double将类型参数T进行了实例化11因此,上例中max函数可以用显式模板类型的方法写成下面的形势:voidmain(){inti=10,j=56;floatx1=50.34f,x2=56.34f;doubley1=673.36,y2=465.972;cout<<"Th
8、;当编译器遇到max(y1,y2)时,生成函数名max(double,double):max(y1,y2)用模板实参double将类型参数T进行了实例化11因此,上例中max函数可以用显式模板类型的方法写成下面的形势:voidmain(){inti=10,j=56;floatx1=50.34f,x2=56.34f;doubley1=673.36,y2=465.972;cout<<"Th
此文档下载收益归作者所有