- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
面向对象的程序设计chapter
第7章 模板 主要内容 参数多态性和模板 类模板 函数模板 7.1 参数多态性和模板 参数多态性 问题引入 在程序设计中往往存在这样的现象: 两个或多个函数(或过程)的函数体完全相同。 它们的参数类型和函数返回类型不同。 例如: 7.1 参数多态性和模板 参数多态性 能否为上述这些函数只写出一套代码呢? 解决这个问题的常规方法是使用宏定义。 例如: #define max(x, y) ((xy)? x :y) 7.1 参数多态性和模板 参数多态性 宏定义带来的问题之一 可能在不该替换的地方进行了替换。 例如: class exa{ public: int max(int, int); //此处宏扩展将导致语法错误 //… }; 7.1 参数多态性和模板 参数多态性 两种解决方法 把类的数据类型定义为一个抽象的、需根据具体问题要求确定的数据类型。 把类的数据类型定义为一个参数。即类的参数多态性。 方法1举例: 例7.1 设计一个适合于float类型和double类型的复数类。 7.1 参数多态性和模板 7.1 参数多态性和模板 7.1 参数多态性和模板 方法1的缺点 当一个外部程序中,如果同时存在几种不同的数据类型要求时,则这种通用类不能满足需要。 7.1 参数多态性和模板 模板(template) 模板概念 它可以实现类型参数化,即把函数或类中的数据类型定义为参数,从而解决参数多态性问题,实现代码可重用性。 模板分类(按用途) 函数模板 类模板 7.1 参数多态性和模板 模板(template) 参数实例化 指给函数模板或类模板带入实际的类型参数。 C++中把经过参数实例化的函数模板称为模板函数,把经过参数实例化的类模板称为模板类 7.1 参数多态性和模板 模板(template) 模板、模板函数、模板类和对象之间的关系 7.2 类模板 类模板的概念 一个类模板(类属类)是一个带参数的类。 类模板允许用户为类定义一种模式,使得类中的某些数据成员、某些成员函数的参数或返回值,能取任意数据类型(包括系统预定义的和用户自定义的类型)。 7.2 类模板 类模板的设计 template 模板形参表 class 类名{ //… } template是一个声明模板的关键字。 模板形参表可包括一个或一个以上的模板参数。每个模板参数前加关键字class。例如: class T1 [,class T2] [,…] 7.2 类模板 类模板的设计 在类定义中参数化的数据类型用模板形参表示。 在类定义体外定义成员函数时,若此成员函数中有模板参数存在,则需在函数体外进行模板声明,并在函数名前的类名后缀上T。 例如: 7.2 类模板 7.2 类模板 7.2 类模板 注意 类模板定义前和每个外联函数形式的成员函数模板前,都要加语句: template class T 原来程序中为Complex的地方,均应改为: ComplexT 7.2 类模板 类模板的使用 模板形参实例化 在外部程序中,用显式方法给类模板传递实例化参数,生成模板类。 类实例化 使用模板类定义对象。 7.2 类模板 例如: 使用复数类模板生成int复数类并创建对象: Complexint a(2,4), b(1,5), c; c = a.Add(b); 使用复数类模板生成float复数类并创建对象: Complexfloat a(2.1,4.3), b(1.2,5.3), c; c = a.Add(b); 7.2 类模板 类模板可有多个模板参数。 例如: 7.3 函数模板 函数模板的定义 一般定义格式: template 模板参数表 返回类型 函数名(函数模板形参表) { 函数体 } 例:设计一个求两个数中较大数的函数模板。 7.3 函数模板 模板函数的生成(函数模板的实例化) 基本概念 函数模板在具体调用时必须进行参数实例化。 经参数实例化而生成的具体函数称为模板函数。 对模板形参进行实例化的参数称为模板实参。 7.3 函数模板 模板函数的生成(函数模板的实例化) 生成模板函数的两种方法 显式方法 在函数模板调用前,用基本数据类型或用户自定义数据类型对函数模板进行参数实例化,生成模板函数。 例如: 7.3 函数模板 7.3 函数模板 模板函数的生成(函数模板的实例化) 生成模板函数的两种方法 隐式方法 直接传递实参进行函数调用。 在函数模板调用时,由编译系统根据调用函数的实际参数的数据类型自动进行参数实例化,生成模板函数。 例如:int a=10, b=20, c; c=max(a, b); 7.3 函数模板 函数模板与同名的非模板函数的的调用规则 对一个实际的函数调用,首先寻找一个参数完全匹配的函数,若找到就调用它。 在1)
文档评论(0)