- 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程序设计课件(第6章)
第6章 模板 本章学习重点掌握内容: 函数模板的定义、语法格式及使用注意事项 函数模板的实例化 函数模板与模板函数的区别 类模板的定义及使用注意事项 类模板的实例化 派生类和类模板的关系 第6章 模板 6.1 函数模板 6.2 类模板 6.3 综合应用实例 6.1 函数模板 学习模板函数之前,首先看看函数重载存在的缺陷。 【例6.1】函数重载例题 #includeiostream.h int max(int x, int y) { return xy?x:y ; } char max(char x, char y) { return xy? x:y ; } void main() { int x = 7; int y = 4; coutmax( x, y)endl; double a = 3.5; double b = 4.5; coutmax( a, b)endl; } 6.1 函数模板 例6.1中,在调用max(x, y)时,没有问题;在调用max(a, b)时会出现编译错误,因为没有定义double类型的重载版本。 对于上面的max()函数,它们具有同样的功能,能否只写一套代码呢? C++引入了函数模板解决这个问题。 6.1.1 函数模板语法 函数模板定义的语法格式如下: template class T1, class T2, … 类型名 函数名(参数表) { 函数体的定义 } 其中,template是声明函数模板的关键字。template后一对“”括起来且用“,”分隔的是函数模板参数表。 6.1.1 函数模板语法 模板参数分为模板类型参数和模板非类型参数。模板类型参数代表一种类型 每个模板类型参数前必须用关键字class或typename标识,表示“一个用户定义的或固有的数据类型” 。 模板非类型参数是一个普通的参数声明,要求在编译期就确定它的值,也就是说模板非类型参数必须是个编译期常量。 模板函数可以先定义后使用;也可以先声明,再使用,最后定义。 6.1.2 函数模板实例化 根据函数模板构造函数的过程称为函数模板实例化,这个过程是隐式发生的。 为了判断用作模板实参的实际类型和值,编译器需要检查函数调用提供的函数实参的类型。 用函数实参的类型来决定模板实参的类型和值的过程被称为模板实参推演。也可以显式地指定模板实参。 在取函数模板实例的地址时,必须能够通过上下文环境为一个模板实参决定一个唯一的类型或值。否则,就会产生编译时错误。 【例6.2】模板函数实现例6.1的函数重载例题。 #includeiostream.h template class T T max(T x, T y) { return xy? x:y ; } void main() { int x = 7; int y = 4; coutx和y的较大值是:; coutmax( x, y)endl; double a = 3.5; double b = 4.5; couta和b的较大值是:; coutmax( a, b)endl; } 此时,无论是调用max(x, y)还是调用max(a, b)都没有问题。这是因为,当编译器遇到表达式max(x, y)时,它就搜索与实参x,y相匹配的实max(),由于x,y的类型都是int,并且函数模板声明并使用了一个参数T,所以匹配也就确定了,编译器产生了一个如下所示的函数。 int max(int x, int y) { return xy?x:y ; } 当编译器遇到表达式max(a, b)时,搜索与实参a,b相匹配的实max(),由于a,b的类型都是double,并且函数模板声明并使用了一个参数T,所以匹配也就确定了,编译器产生了一个如下所示的函数。 double max(double x, double y) { return xy?x:y ; } 6.1.3 函数模板和模板函数 函数模板指定了怎样根据一组或更多实际类型或值构造出独立的函数。模板函数是根据函数模板构造出来的函数。二者区别如下: (1)函数模板与模板函数的关系好比类与对象的关系。函数模板与类的定义相似,而模板函数与对象的定义相似。 (2)函数模板是个模板,用来生成函数。模板函数是个函数,由函数模板生成。 6.1.3 函数模板和模板函数 (3)函数模板是程序员用代码写出来的,模板函数是编译系统在编译时根据函数模板自动生成的。 (4)函数模板是模板的定义,是一类函数的抽象,代表了一类具有相同功能的函数,
您可能关注的文档
- 4.4中位数教授教化设计(青岛版八年级上).doc
- 4.1管理责任A.0-1.doc
- 4.4中位数教授教化设计(青岛版八年级上)1.doc
- 4.8.3歇息防护用品(具)和保健品发放治理轨制.doc
- 4.1-原子的构成.ppt
- 4.设计交底及图纸会审指南.doc
- 4.除杂质.doc
- 4-习题课1.ppt
- 423感恩母爱主题班会课件.ppt
- 42CrMo钢宽带激光熔覆NiCrBSi组织和性能.pdf
- 中国国家标准 GB/T 15445.3-2025粒度分析结果的表述 第3部分:试验曲线的参考模型拟合.pdf
- 《GB/T 15445.3-2025粒度分析结果的表述 第3部分:试验曲线的参考模型拟合》.pdf
- 中国国家标准 GB/Z 41305.3-2025环境条件 电子设备振动和冲击 第3部分:利用轨道车辆运输.pdf
- 《GB/Z 41305.3-2025环境条件 电子设备振动和冲击 第3部分:利用轨道车辆运输》.pdf
- GB/Z 41305.3-2025环境条件 电子设备振动和冲击 第3部分:利用轨道车辆运输.pdf
- 中国国家标准 GB/T 46713.4-2025轨道交通 机车车辆 辅助供电系统蓄电池 第4部分:镍氢蓄电池.pdf
- 《GB/T 46713.4-2025轨道交通 机车车辆 辅助供电系统蓄电池 第4部分:镍氢蓄电池》.pdf
- GB/T 46713.4-2025轨道交通 机车车辆 辅助供电系统蓄电池 第4部分:镍氢蓄电池.pdf
- 中国国家标准 GB/Z 106-2025质量管理体系 组织变革管理 过程.pdf
- GB/Z 106-2025质量管理体系 组织变革管理 过程.pdf
原创力文档


文档评论(0)