- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
惠州学院c第8章模板
第二部分 面向对象的程序设计 第3章 类和对象(一) 第4章 类和对象(二) 第5章 继承和派生 第6章 虚函数与多态性 第7章 运算符重载 第8章 模板 第9章 标准模板库STL 第10章 C++语言的输入和输出 第8章 模板 本章重点: 模板的概念 函数模板与模板函数 类模板与模板类 模板是C++最重要的特性之一,使用模版可以设计出与数据类型无关的程序框架,可以建立具有通用类型的类库和函数库。 模板是C++软件重用机制的又一完美体现,引出了参数化多态性的概念,即把程序所处理的对象的类型参数化,使得一段程序可以用于多种不同类型的对象。 8.1 模板的概念 前面已经学过函数的重载,对于int型和float型数据,必须定义两个单独的函数Max( ),才能实现对两个数求最大值的功能。如下程序所示的函数Max,,实现两个函数的主要操作都是一样的,唯一的差别是:一个函数处理int 型数据,另一个函数处理float 型数据。 int Max( int a, int b) //求两个int数最大值 { return ab?a:b; } float Max( float a, float b) //求两个float数最大值 { return ab?a:b; } 可以看出,求任何类型两个数的最大值,都有下列函数定义形式: T Max( T a, T b) //求两个T类型数最大值 { return ab?a:b; } 这种Max重载函数的统一特征是参数类型不同,函数体操作却完全相同。考虑这样两个问题: 第一,能否避免函数重载时的重复工作? 第二,这些重载函数对新的数据类型是否支持? 要解决这两个问题, C++中的模板就可以做到。 有了模板,重复的函数重载工作可以省略; 良好的模板再结合运算符重载等其他机制,也能够适用于各种新定义的数据类型。 8.2 函数模板与模板函数 函数模板是函数的一种抽象形式。函数模板的定义形式为: template class T1,class T2,... 返回类型 函数模板名(数据参教表) { 函数模板的函数体 } 前面的Max函数因此可以写成如下形式: template typename T T Max( T a, T b) //求两个T类型数最大值 { return ab?a:b; } 模板并不是函数,它是以具体的类型为实参来生成函数体的一种程序框架,C++在编译函数模板时,不会产生任何执行代码。 只有在用函数模板来定义具体函数时,才会生成执行代码,而使用函数模板则只需以函数模板名为函数名进行函数调用即可。 【例8.1】编写求最大和求绝对值两个函数模板。 /* 08_01.cpp */ #includeiostream using namespace std; template typename T T Max( T a, T b) //求两个T类型数最大值 { return ab?a:b; } template typename T T Abs( T a) //求T类型数的绝对值 { return a=0?a:-a; } int main( ) { int ia=-5,ib=11,ic; float fa=3.14f,fb=7.2f,fc; ic=Max(ia,ib); cout”Max(ia,ib)=”icendl?; ic=Abs(ia)?; cout”Abs(ia)=”icendl?; fc=Max(fa,fb); cout”Max(fa,fb)=”fcendl?; fc=Abs(fa)?; cout”Abs(fa)=”fcendl?; return 0; } Max(ia,ib)=11 Abs(ia)=5 Max(fa,fb)=7.2 Abs(fa)=3.14 C++的编译器在扫描到Max(ia,ib)时,因为是第一次发现Max函数调用,而ia,ib是整型,因此确定函数模板中的抽象类型T为int,所以内部生成如下的模板函数: template int int Max( int a, int b) { return ab?a:b; } 而把此参数类型具体化产生新的模板函数的过程称为函数模板实例化。 【例8.2】重载模板函数。 /* 08_02.cpp */ #includeiostream.h #includestring.h template typename T T Max( T a, T b) //求两个T类型数最大值 { return ab?a:b; } char *Max(char *pa,char *pb) { return strcmp(pa,pb)0?pa:pb;
您可能关注的文档
- 必修3单元整合提升2.ppt
- 必修一lesson1第一节.ppt
- 心电图讲座(下).ppt
- 快递业务操作与管理21.ppt
- 总复习第5章.ppt
- 循环水操作原理及日常维护注意事项.pptx
- 总复习1大工传热学.ppt
- 总悬浮颗粒物PM10PM25测定方法的比较.pptx
- 情报学概论-信息组织.ppt
- 惠州学院单片机魏暁慧老师课件第7章.ppt
- 广东省东莞市2024-2025学年八年级上学期生物期中试题(解析版).pdf
- 非遗剪纸文创产品开发经理岗位招聘考试试卷及答案.doc
- 广东省东莞市2024-2025学年高二上学期期末教学质量检查数学试题.pdf
- 体育安全理论课件图片素材.ppt
- 3.1 公民基本权利 课件-2025-2026学年道德与法治八年级下册 统编版 .pptx
- 广东省潮州市湘桥区城南实验中学等校2024-2025学年八年级上学期期中地理试题(解析版).pdf
- 大数据运维工程师岗位招聘考试试卷及答案.doc
- 广东省深圳市福田区八校2026届数学八年级第一学期期末教学质量检测模拟试题含解析.doc
- 广东省潮州市湘桥区城基初级中学2024-2025学年八年级上学期11月期中考试数学试题(解析版).pdf
- 广东省潮州市湘桥区城西中学2024-2025学年八年级上学期期中地理试题(解析版).pdf
最近下载
- 人教版小学数学四年级上册期末测试卷及答案1套.docx VIP
- 高中地理必修一《第二章 地球上的大气》知识清单.docx VIP
- 建筑节能专项施工方案.doc VIP
- IG化学真题六试题.pdf VIP
- 培训教育-全面贯彻党的教育方针.docx VIP
- 2025《水下清淤机器人的结构方案设计》13000字(论文).docx
- 2026华电新能源集团股份有限公司面向系统内招聘10人模拟试卷(浓缩300题)附答案.docx VIP
- 统编版语文六年级上册易错专项特训修改病句-(含答案).pdf VIP
- 劳务承包合同范本简单.doc VIP
- 人教版小学数学四年级上册期末测试卷及答案1套.docx VIP
原创力文档


文档评论(0)