- 1、本文档共68页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
类属机制 模板
第九章 类属机制 模板的概念 函数模板 类模板 模板应用实例 类属 强类型程序——编译时确定类型。 包容数据结构——链表、堆栈、队列、集合、二叉树等,这些数据结构好像一个容器,可以存放多种类型对象。 多态数据结构——结构中存放的元素类型必须从共同基类派生。 包容数据结构——存放元素的类型之间可能完全无关。 解决类型的严格性和灵活性之间的矛盾: 1、利用宏进行复制。 2、放松类型检查,运行期检查。 3、利用包容数据结构。Void和引用。 4、利用类属——数据类型作为类的参数。C++利用模板机制实现类属。 类属类,或者参数化类——由C++语言的模板定义的类。 不是一个真正的类类型。 不可直接创建对象实例。 类属类的实例化——指用某一数据类型替代类属类的类型参数。就是用实际类属参数去代替形式类属参数。 C++语言中使用模板机制实现的类属类是无约束类属类,模板机制无法支持受约束类属类。 C++语言的受约束类属类必须采用继承与动态绑定实现。 模板 模板是C++支持参数化多态的工具。 使用模板可以使用户为类或者函数声明一种一般模式; 从而使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。 模板的概念 所谓模板是一种使用无类型参数来产生一系列函数或类的机制,是C++的一个重要特性。 它的实现,方便了更大规模的软件开发。 若一个程序的功能是对某种特定的数据类型进行处理, 则可以将所处理的数据类型说明为参数, 以便在其他数据类型的情况下使用, 这就是模板的由来。 模板是以一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类型。 通过模板可以产生类或函数的集合,使它们操作不同的数据类型,从而避免需要为每一种数据类型产生一个单独的类或函数。 函数模板与模板函数 考虑返回两参数中较大者的函数 max(x,y)。 x 和 y 为具有可比较次序的任何类型。 但是,因为 C++ 是强类型语言,它希望参数 x 和 y 的类型在编译时就声明。 需要 max( ) 的许多重载版本,在这些重载版本中,每个版本的代码是相同的,但是形参代表的数据类型却不相同。 int max(int x,int y) { return (x y) ? x : y; } long max(long x,long y) { return (x y) ? x : y; } … 以上设计一个求两参数最大值的函数,不使用模板时,需要定义四个函数: int max(int a,int b){return(ab)?a,b;} long max(long a,long b){return(ab)?a,b;} double max(double a,double b){return(ab)?a,b;} char max(char a,char b){return(ab)?a,b;} 解决这个问题的一种方法是使用宏: #define max(x,y) (((x)(y))?(x):(y)) 然而,使用 #define 避开了类型检查机制,使得宏替换在用户不希望其发生的地方出现,例如,使用宏可能会导致在一个 int 参数和一个 struct 参数之间进行比较。 另一种解决办法是使用模板。如果使用模板,数据类型本身就是一个参数: template class T T max(T x,T y) { return (xy) ? x : y; } 若使用模板,则只定义一个函数: Templateclass type type max(type a,type b) { return(ab)?a,b; } 关键字 template 表示正在声明一个模板,数据类型参数T由模板参数class T给出。该模板的含义为,无论模板参数T实例为int、char或任意其他类型,包括类类型时,函数max就为实例化了的类型的参数求最大值。 max函数并不是一个完全的函数。称它为函数模板。因此,函数模板代表了一类函数,而且它不是一个完全的函数,必须将其模板参数T实例化后,才能完成具体函数的功能。 将T实例化的参数常常称为模板实参。 用模板实参实例化的函数称为模板函数。 一个函数模板提供一类函数的抽象,它以任意类型 T 为参数。由一个函数模板产生的函数称为模板函数,它是函数模板的具体实例。 函数模板将具有相同程序正文的一类函数抽象出来,可以适应任意类型T。函数模板对某一特定类型的实例就是模板函数。函数模板代表了一类函数,模板函数表示某一具体的函数。 C++程序由类和函数组成,模板也分为类模板(class template)和
您可能关注的文档
- 管 理 会 计 学责任会计.ppt
- 管-中国金融学院电子商务研究所 .ppt
- 管制中心业务介绍.ppt
- 管制图Minitab操作教程.ppt
- 管制圖-0710.ppt
- 管制图的建立步骤.ppt
- 管壳式换热器选型设计.ppt
- 管教子女基本法.ppt
- 管理 6第六章__战略性计划.ppt
- 管理 8第八章__人力资源管理.ppt
- 浙江衢州市卫生健康委员会衢州市直公立医院高层次紧缺人才招聘11人笔试模拟试题参考答案详解.docx
- 浙江温州泰顺县退役军人事务局招聘编外工作人员笔试备考题库及参考答案详解一套.docx
- 江苏靖江市数据局公开招聘编外工作人员笔试模拟试题及参考答案详解.docx
- 广东茂名市公安局电白分局招聘警务辅助人员40人笔试模拟试题带答案详解.docx
- 江苏盐城市大丰区住房和城乡建设局招聘劳务派遣工作人员4人笔试模拟试题带答案详解.docx
- 浙江舟山岱山县东沙镇人民政府招聘笔试模拟试题及参考答案详解1套.docx
- 最高人民检察院直属事业单位2025年度公开招聘工作人员笔试模拟试题含答案详解.docx
- 浙江金华市委宣传部、中共金华市委网信办所属事业单位选调工作人员笔试备考题库及答案详解1套.docx
- 广东深圳市党建组织员招聘40人笔试模拟试题及答案详解1套.docx
- 江苏南京水利科学研究院招聘非在编工作人员4人笔试模拟试题及参考答案详解.docx
最近下载
- SY 4201.4-2016 石油天然气建设工程施工质量验收规范 设备安装工程 第4部分:炉类.docx VIP
- 电力市场分析软件:PLEXOS二次开发_(13).电力市场改革与趋势分析.docx VIP
- 云和雪梨生产全程质量控制技术规范.docx VIP
- 电力市场分析软件:PLEXOS二次开发_(12).可视化与报告生成.docx VIP
- 2024-2025学年四川省成都市新都一中实验学校七年级(上)分班数学模拟试卷(含答案).pdf VIP
- 跨座式与悬挂式单轨运输系统幻灯片.ppt VIP
- 市场营销论文:长春农商银行小微企业贷款业务市场营销策略研究.docx VIP
- 电力市场分析软件:PLEXOS二次开发_(11).数据库管理与接口设计.docx VIP
- 电力市场分析软件:PLEXOS二次开发_(10).二次开发工具与技巧.docx VIP
- 有机肥采购项目投标书(范本).docx
文档评论(0)