如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
面向对象程序设计与C++1.普通函数的缺陷普通类的缺陷对于一些结构及操作相同,只是成员数据类型不同的抽象数据结构,若是用普通类class进行封装,需要将不同的数据类型封装成不同的类,造成代码重复及使用不便.解决的方法之一:利用class封装较为通用的数据类型,使用的时候再进行数据类型转换.解决的方法之二:使用模板2.模板函数模板template<classT>Tmax(Tx,Ty){return(x>y)?x:y;}voidmain(){intx1=10,y1=8;floatx2=20.3,y2=33.5;charx3=‘k’,y3=‘n’;cout<<“max(x1,y1)=“<<max(x1,y1)<<endl;cout<<“max(x2,y2)=“<<max(x2,y2)<<endl;cout<<“max(x3,y3)=“<<max(x3,y3)<<endl;}采用模板参数的各参数之间必须保持完全一致的类型.template<classT>Tmax(Tx,Ty){return(x>y)?x:y;}voidmain(){inti;charc;floatf;max(i,i);//ok.max(c,c);//ok.max(f,f);//ok.max(i,c);//error:templateparameter'T'isambiguousmax(i,f);//error:templateparameter'T'isambiguousmax(c,f);//error:templateparameter'T'isambiguous}可以重载于与之同名的非模板函数.template<classT>Tmax(Tx,Ty){return(x>y)?x:y;}//模板函数char*max(char*x,char*y){//非模板函数return(strcmp(x,y)>=0)?x:y;}voidmain(){charch1[6]=“abc”;charch2[6]=“def”;cout<<“max(ch1,ch2)=“<<max(ch1,ch2)<<endl;}模板函数与非模板函数的优先匹配顺序.template<classT>Tmax(Tx,Ty){return(x>y)?x:y;}//函数1char*max(char*x,char*y){//函数2return(strcmp(x,y)>=0)?x:y;}constchar*max(char*x,constchar*y){//函数3return(strcmp(x,y)>=0)?x:y;}voidmain(){charch1[6]=“abc”;charch2[6]=“def”;cout<<“max(ch1,ch2)=“<<max(ch1,ch2)<<endl;}模板类在类定义体外定义成员函数时,需进行模板声明,并在类名后缀“<T>”.template<classT>//模板声明array<T>::array(intsize){//…}template<classT>//模板声明T&array<T>::operator[](intindex){//…}模板类的使用3.STL的使用list模板vector模板迭代器iterator泛型算法所有泛型算法前两个实参都是一对iterator,通常被称为first和last.泛型算法正确工作的要求:能遍历模板中元素集合:从first通过反复递增操作能到达last.模板种元素能进行比较:关联的底层类型支持‘等于’操作符.需要一个公共类型来表示元素在容器中的位置,以及没有找到时使用的无位置(noposition).使用泛型算法需要包含<algorithm>和<iterator>头文件.因为STL中list不像vector一样支持随即访问,所以remove,sort等泛型算法不能用于list,但list模板本身封装了这些算法:list::sort()排序list::merge()合并两个有序序列list::reverse()元素方向排列list::remove()删除等于某个值的元素……泛型算法示例仿照示例程序10_01编写模板类matrix,支持任意数据类型的矩阵,重载+,-,*,=,==,[]等操作。利用int,double,类complex(包含实数real,虚数virt两部分)等数据类型测试所写matrix类接口.temp