类属机制 模板.ppt

  1. 1、本文档共68页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
类属机制 模板

第九章 类属机制 模板的概念 函数模板 类模板 模板应用实例 类属 强类型程序——编译时确定类型。 包容数据结构——链表、堆栈、队列、集合、二叉树等,这些数据结构好像一个容器,可以存放多种类型对象。 多态数据结构——结构中存放的元素类型必须从共同基类派生。 包容数据结构——存放元素的类型之间可能完全无关。 解决类型的严格性和灵活性之间的矛盾: 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)和

文档评论(0)

ligennv1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档