- 1、本文档共40页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C 课件:第六章
第六章模版 模板是C++软件复用的功能之一 模板可以使我们用一个代码段指定一组相关(重载)函数(称为模板函数) 或一组相关类(称为模板类) 类似一个函数或一个类 更抽象:参数和返回值的类型可以变 5.1模板以前的解决方法----宏 例子: int max(int x,int y){ return (xy)?x:y; } float max(float x,float y){ return(xy)?x:y; } double max(double x,double y){ return(xy)?x:y; } 弊端一: 宏检验不严格。由于在宏中无需说明类型,因此可能会产生x与y的不同类 型变量之间的比较,这可能不会出错,可能会产生一个严重错误。 #include iostream.h ? #define max(x,y)((xy)?x:y) ? int main(){ int x1=1,y1=2; coutmax(x1,y1)endl; int x2=3;char y2=4; coutmax(x2,y2)endl; } 弊端二:宏可能会替换了不该替换的地方:? #define max(x,y)((xy)?x:y) class sample{ public: int i; int max(int,int); }; int main(){ int x1=1,y1=2; coutmax(x1,y1)endl; int x2=3;char y2=4; coutmax(x2,y2)endl; } max(int i,int j){ return (ij?i:j); } 以前也讲过由于宏操作的不严格,导致了不少麻烦(第一讲、用const) 解决宏替换可能会造成的潜在的问题,可以用另一种方法实现软件复用或代码重用 ——模板。 5.2函数模板和模板函数 1、函数模板的声明格式: template class type 返回类型 函数名(参数表) { … } template是一个关键字,用来声明一个模板 关键字class的type是模板的形参 模板的形参在使用时被实例化为实际的数据类型 例子:上例中最大值函数max()转换成函数模板 template class T T max(T x,T y) { return (xy)?x:y; } ·在这个例子中T成为模板形参 ·模板形参可以为系统预定义数据类型,如int,float,char等,也可以是用户自定义的数据类型。 ·由于在模板中将可能变化的参数类型用模板形参来代替,这样max函数模板就代表了一类函数。 ·要真正使用max,就必须先将模板形参转换成确定的数据类型,这个转换的过程称为模板的实例化。 例子:模板的实例化与形参类型确定 template class AT AT max(AT x,AT y){return (xy)?x:y;} ? void main(){ int x1=1,y1=2; coutmax(x1,y1)endl; float x3=1.1,y3=2.2; coutmax(x3,y3)endl; char x4=a,y4=b; coutmax(x4,y4)endl; int x2=3;char y2=4; coutmax(x2,y2)endl; //错误,说明检验比较严格 } //VC中出错,不同编译器不同对待 在上例中,一个函数模板max(x,y)实例化了3个模板函数: 整型: max(x1,y1) 浮点型:max(x3,y3) 字符型:max(x4,y4) 另一个例子: template class AT AT sum(AT *array,int size=0){ AT total=0; for (int i=0;isize;i++) total+=array[i]; return total; } ?int int_array[]={1,2,3,4,5,6,7,8,9,10}; double double_array[]={1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9,10.10}; ? int main(){ int itotal=sum(int_array,10); //实例化 double dtotal=sum(double_array,10); //实例化 ? coutInteger Summary
您可能关注的文档
最近下载
- 中国华电集团公司电力安全工作规程(水力机械部分山东审定稿)20121116.doc
- CAAC无人机理论考试题库及答案(2024修订版).docx
- 《通往夏天的隧道 再见的出口》读书笔记思维导图.pptx VIP
- 近五年天津中考英语真题及答案2024.docx VIP
- 附件2:汽车专访.pdf VIP
- 二值的黑白图像(教学设计)-2024-2025学年人教版(2024)小学信息技术四年级全一册.docx VIP
- 小学文言文教学的基本策略.ppt
- 2024年10月自考00908网络营销与策划试题及答案含评分参考.pdf
- 2024年中考模拟试卷语文(北京卷).docx VIP
- 社区全职妈妈赋能项目方案设计.pdf
文档评论(0)