chapter 类和对象的继承.doc

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

第四章 继承性(inheritance)与类的派生(derivation) 4.1 派生类(derived class)及其对象(object) 4.1.1 定义 第三章中提到,在面向对象程序设计语言中,“类”是一组具有相同数据结构(属性)和相同操作(方法、函数)的集合,是一系列具有相同性质的对象的抽象内容,它描述的不是个别对象而是全体对象的共同特征。“类”是具有相同共性的各事物的集合,是这些事物的统一抽象内容。 C++中,“类”被表达为一个具有特定功能的程序块,它提供代码共享(代码重用性),以便用户可以方便地建立所需要的任何数据类型。 但一个“类”(基类)无法包含这些事物的全部共性,而只包含主要共性。为包含其它次要共性,可通过继承机制定义、建立其它类(称为派生类)。 继承(inheritance)是C++面向对象程序设计的重要特性之一。所谓继承,是建立一个新的类(即直接派生类),从一个或多个已经定义的类(称为直接基类)中继承一部分或全部函数和数据,同时还能重新定义或增加新的数据和函数。 继承机制在对象之间建立了派生关系,从而建立类的层次或等级(hierarchy of classes)。 引入继承机制的目的是代码重用性(reusability) 上图中,“几何图形”是基类,它包含了几何图形的一些基本共性。它的派生类“三角形”、“四边形”和“圆形”各自包含了本图形的一些次要共性。例如计算面积的表达式,这三个图形都不相同。而“四边形”又可派生出“正方形”、“平行四边形”和“矩形”,从而使它们各自具有不同的具体属性。 具体说,例如,先有一个用于测量温度的类(第三章有过类似例子): class temp { static double temp; //数据:温 double ref; //数据:温变量temp的引用 double meas ( ); //函数:用于测量温度 } 过些时候,需要增加控制水温的功能,设计一个新类: class temp_water { static double temp; //原有数据:水温 double ref; //原有数据:水温变量temp的引用 char *err_msg ; //数据:断水警告 double meas ( ); //原有函数:用于测量温 void act_water( ); //函数:采取动作,开启水阀 void regulate( ); //函数:调节水阀开启度,以便控制水量和水温 } 随后可将字符指针char *err_msg初始化为指向字符串“No cooling water”。 可以看出,这两个类的内容有不少重复(重复部分用标出)。为避免重复,可设计新类为能够继承前一个类的全部或一部分内容。 可以将前一个类class temp定义为基类(base class),而新类则称为派生类(derived class),如下: class temp_water : temp { char *err_msg ; //数据:断水警告 void act_water( ); //函数:采取动作,开启水阀 void regulate( ); //函数:调节水阀开启度,以便控制水量和水温 }; 派生类定义的格式是其类首加上冒号(:)和基类名称(temp中基类称base class(也称父类ancester class),派生类称derived class(也称子类sub-class)。 这样就建立了类的层次(hierarchy of classes) 可用有向无环图(Directed Acyclic Graph, DAG)来表示继承关系。 DAG private 绝大部分书中,有向无环图(Directed Acyclic Graph, DAG)的连接线使用向上的箭头,只有J.Grabe : Up and Running with C++书中使用向下的箭头(而按照数据结构”图”的定义箭头应向下)。本课中不用箭头只用连线。 以后还有其他箭头用于表示基类与派生类之间的参数传递关系和构造函数调用顺序。 4.1.2 对象的内存存储内容(存储形式) 以前提到,在建立对象之前,当用户程序被连接后,C++系统即为该程序分配内存数据区空间(用于存储该类的静态数据)以及内存代码区空间(用于存储成员函数)。 当程序运行并建立对象后,系统又为该对象分配内存栈区空间,用于存储每个对象的非静态数据。 因此,用于存储对象数据成员的内存空间分为两部分:即内存栈区空间以及内存数据区空间。 当建立派生类的对象后,派生类对象的内存栈区空间中既包括基类部分的也包括派生类部分的所有非静态数据成员。这些数据成员中不管是否允许访问(详见本章§4.2),都一律存

文档评论(0)

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

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

1亿VIP精品文档

相关文档