ch09类属机制.ppt

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

第九章 类属机制 类属的作用 类属类的定义与实例化 类属类的继承关系 类属函数的定义与实例化 编制函数求两个数据的最大值: int max(int a, int b) {return (ab)?a:b;} float max(float a, float b) {return (ab)?a:b;} double max(double a, double b) {return (ab)?a:b;} type max(type a, type b) { return (ab)?a:b; } §9.1 类属 类属是实现编译时多态性的另一种机制,这种机制通过将数据类型参数化使得程序具有多态性。 类属机制的基本思想: 实际应用中,一些函数的功能相同,唯一的区别只在于处理对象的数据类型不同,若用函数重载实现,则需编写多个函数: 例:int max(int i, int j) float max(float i, float j) { return ij?i:j; } { return ij?i:j; } 编程时只提供一套实现该功能的程序实体,然后将数据类型作为参数传递,这就是类属机制的思想。 C++语言中,使用模板来实现类属机制 模板具有形式类属参数:将数据类型作为模板的参数,参数化的数据类型就是形式类属参数。 模板须经过实例化后才能使用:实例化是指用某一具体数据类型替代模板中的形式类属参数的过程,该确定的数据类型称为实际类属参数。 C++语言的模板 函数模板(类属函数) 函数的形式参数表中某些形式参数的数据类型被参数化 函数模板本身不是函数,经实例化后才得到函数。 类模板(类属类) 类的数据成员的类型或成员函数的形参类型被参数化 类属类也不是类,经实例化后才得到具体的类。 §9.2 类模板 一、类属类的定义 一般形式: template class 类属参数1, class 类属参数2, … class 类名 { … }; 形式类属参数表:用尖括号括起来的部分。用逗号隔开不同的形式类属参数,每个类属参数都由class引入。 类属参数在类的声明中有效,在类外无效。 在类的定义中,把这些类属参数当数据类型来声明各种变量。 例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(); // 求和 }; template class T // 注意在类外声明类模板的 void ARRAYT::sort() // 成员函数的形式 { int i, j; T d; for (i=1; in; i++)// 冒泡排序 for (j=n-1; j=i; j--) { if (set[j-1] set[j]) {//交换set[j-1]和set[j]的值 d = set[j-1]; set[j-1] = set[j]; set[j] = d ; } } } template class T int ARRAYT::seek(T key) { for (int i=0; in; i++) if (set[i]==key) return i; // 找到,则返回key在数组中的位置 return -1; // 找不到,返回-1 } template class T T ARRAYT::sum() { T s=0; for (int i=0; in; i++) s+= set[i]; return s; } 二、类属类的实例化 类模板不是类,不能用于创建对象,只有经过实例化后才得到类 实例化的一般形式: 类属类名字实际类属参数表 例: STACK 类模板,不能用于创建对象 STACKint obj; 实例化:用实际类属参数int替换形式类属参数ELEMENT_TYPE后,得到一个整形堆栈类,即可用于声明对象。 一个类模板可以实例化为多个不同的类 例1中声明的ARRAY类模板的实例化 void main() { int i; int IData[10] = {

文档评论(0)

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

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

1亿VIP精品文档

相关文档