欢迎来到天天文库
浏览记录
ID:43188424
大小:68.50 KB
页数:26页
时间:2019-10-02
《c++教程第18章》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第18章模板2021/8/311讲授内容类属机制函数模板的定义与使用类模板的定义与使用2021/8/312例子1:函数模板例子templatevoidsortArray(ElementTypeb[],intlen){for(intpass=0;passb[i]){ElementTypehold;hold=b[pass];b[pass]=b[i];b[i]=hold;}}2021/8/313
2、18.1类属机制(1/2)从功能来看,有些程序非常相似,只是处理对象(数据)的类型不同例6_4中的程序voidsortArray(intb[],intlen);voidsortArray(doubleb[],intlen);可以考虑提供具有相同逻辑功能的程序,而将数据类型作为参数——类属编程C++中的模板:类模板和函数模板2021/8/31418.1类属机制(2/2)更好的代码重用性重用源代码用户使用模板时,编译器替换模板参数(类型)2021/8/31518.2函数模板(1/5)对不同类型的数据执行相似的操作函数重载函数模板函数重
3、载——代码冗余增加编程负担程序的维护问题(如功能修改,算法变动)2021/8/31618.2函数模板(2/5)函数模板为所有的函数提供唯一的一段函数代码置换代码中的类型参数得到模板函数——实例化函数模板不是函数,不能被执行实例化后的模板函数是真正的函数,可以被执行函数模板模板函数实例化2021/8/31718.2函数模板(3/5)函数模板的定义都是以关键字template开头template之后<>中是函数模板的参数列表函数模板的参数称为类型参数,其类型为class或typename,如templatetempla
4、te2021/8/31818.2函数模板(4/5)<…>之后是模板的函数定义,可以将类型参数用于函数返回值、参数或局部变量的类型声明每个类型参数名要在函数的参数列表中至少出现一次(为什么?)类型参数名的作用域限于函数模板的范围内2021/8/319例子1:函数模板例子templatevoidsortArray(ElementTypeb[],intlen){for(intpass=0;pass5、len-1;i++)if(b[pass]>b[i]){ElementTypehold;hold=b[pass];b[pass]=b[i];b[i]=hold;}}2021/8/311018.2函数模板(5/5)函数模板规定了对数据的处理流程某些数据类型(类型参数)要等到模板实例化时再确定具体的类型函数模板的实例化由编译器来完成根据函数调用的实参类型确定类型参数的具体类型用具体类型替换模板的函数定义中所出现的所有类型参数,完成函数模板的实例化2021/8/3111例子2:使用函数模板实现数组的排序和输出(1/4)#include6、ostream.h>#defineSIZE8templatevoidsortArray(ElementTypeb[],intlen){for(intpass=0;passb[i]){ElementTypehold;hold=b[pass];b[pass]=b[i];b[i]=hold;}}2021/8/3112templatevoiddisplayArr7、ay(ElementTypeb[],intlen){for(intindex=0;index<=len-1;index++)if(index!=len-1)cout<8、<"Beforesorting:";cout<<"ai:t";displayArray(ai,SIZE);sortArray(ai,SIZE);cout<<"Aftersorting:";cout<<"ai:t";displayArra
5、len-1;i++)if(b[pass]>b[i]){ElementTypehold;hold=b[pass];b[pass]=b[i];b[i]=hold;}}2021/8/311018.2函数模板(5/5)函数模板规定了对数据的处理流程某些数据类型(类型参数)要等到模板实例化时再确定具体的类型函数模板的实例化由编译器来完成根据函数调用的实参类型确定类型参数的具体类型用具体类型替换模板的函数定义中所出现的所有类型参数,完成函数模板的实例化2021/8/3111例子2:使用函数模板实现数组的排序和输出(1/4)#include
6、ostream.h>#defineSIZE8templatevoidsortArray(ElementTypeb[],intlen){for(intpass=0;passb[i]){ElementTypehold;hold=b[pass];b[pass]=b[i];b[i]=hold;}}2021/8/3112templatevoiddisplayArr
7、ay(ElementTypeb[],intlen){for(intindex=0;index<=len-1;index++)if(index!=len-1)cout<
8、<"Beforesorting:";cout<<"ai:t";displayArray(ai,SIZE);sortArray(ai,SIZE);cout<<"Aftersorting:";cout<<"ai:t";displayArra
此文档下载收益归作者所有