09第九篇 类属机制.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第九章 类属机制 类属的作用 类属类的定义与实例化 类属类的继承关系 类属函数的定义与实例化 §9.1 类属的基本概念 9.1.1 类型的严格性与灵活性 强类型语言:参与运算的所有对象的类型在编译时即可确定下来,编译程序进行严格类型检查。 好处: 避免类型不兼容错误 程序可靠性高 问题: 灵活性, 容器类(container)数据结构 :链表、堆栈、队列、集合、… 需要放不同类型的对象。 多态数据结构:存放的元素类型必须从共同的基类派生出来。 §9.1 类属的基本概念 9.1.2 解决冲突的途径 源代码复制: 函数重载 int max(int i, int j) float max(float i, float j) { return ij?i:j; } { return ij?i:j;} 宏定义(marco) #define max(a, b) (ab)?a:b) …… float x, y, z; int m, n, k; char c1, c2, c3; … z=max(x, y); k=max(m, n); c3=max(c1, c2); §9.1 类属的基本概念 9.1.2 解决冲突的途径 运行时进行类型匹配检查 void *p; int m; float n; char c; … p=m; … p=n; … p=c; §9.1 类属的基本概念 9.1.2 解决冲突的途径 数据类型作为类的参数—— 类属(genericity) C++采用模板(template)机制实现类属。 编程时只提供一套实现该功能的程序实体,然后将数据类作为参数传递,这就是类属机制的思想 既提高了数据类型的灵活性,又支持编译时做严格类型检查。 §9.1 类属的基本概念 9.1.3 类属机制 类属是实现编译时多态性的另一种机制,这种机制通过将数据类型参数化使得程序具有多态性 由C++语言模板定义的类称为类属类(generic class)或参数化类(parameterized class)。 模板具有类属类属参数:将数据类型作为模板的参数,参数化的数据类型就是类属类属参数 模板须经过实例化后才能使用:实例化是指用某一具体数据类型替代模板中的类属类属参数的过程,该确定的数据类型称为实际类属参数。 无约束类属类:实际类属参数可以是任何类型。 有约束类属类:实际类属参数具有某些特殊性质,如为PERSON类的派生类。 C++中用模板实现的类属类都是无约束类属类。受约束的类属类必须采用继承与动态绑定实现。 9.1.3 类属机制 C++语言的模板 函数模板(类属函数) 函数的形式参数表中某些形式参数的数据类型被参数化 函数模板本身不是函数,经实例化后才得到函数 类模板(类属类) 类的数据成员的类型或成员函数的形参类型被参数化 类属类也不是类,经实例化后才得到具体的类 §9.2 类模板 9.2.1 类属类的定义 一般形式: template class 类属参数1, class 类属参数2, … class 类名 { … }; 形式类属参数表:用尖括号括起来的部分。用逗号隔开不同的形式类属参数,每个类属参数都由class引入 类属参数在类的声明中有效,在类外无效 在类的定义中,把这些类属参数当数据类型来声明各种变量 9.2.1 类属类的定义 例1. 用类模板对数组进行排序、检索和求和 #include iostream.h template class T //声明一个形式类属参数T class ARRAY { T *set; // 定义数组元素集合 int n; // 定义数组元素个数 public: ARRAY( T *data, int i) { set= data ; n= i; } ~ARRAY() { } void sort(); // 排序 int seek(T key); // 检索 T sum(); // 求和 }; 9.2.1 类属类的定义 template class T // 注意在类外声明类模板的 void ARR

文档评论(0)

0520 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档