网站大量收购独家精品文档,联系QQ:2885784924

4_继承派生_J.ppt

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

---继承与派生--- 继承与派生 本章主要内容 继承 派生类及访问权限控制 派生类的构造函数和析构函数 多继承 多继承与二义性 虚基类 继承与派生问题 继承与派生问题 继承与派生问题 继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生新的类,称派生类。 继承呈现了面向对象程序设计的层次结构。体现了由简单到复杂的认识过程。 类的继承与派生 继承就是根据已有的类创建新类的过程。换个角度,从已有类产生新类的过程就是类的派生。 用来派生新类的类称为基类,又称为父类;而派生出来的新类称为派生类,又称为子类。 新类(派生类)自动具有(继承)已有类的所有成员,并可根据需要添加更多的成员。 派生类是特殊的基类,基类是派生类的抽象描述。 继承与派生的目的 继承的目的:实现代码重用。 派生的目的:当新的问题出现,原有程序/类无法解决(或不能完全解决)时,需要对原有程序进行改造,从而使新的类(派生类)能够解决新出现的问题。 派生类的定义 class 派生类名:继承方式 基类名 { 派生类新定义成员 }; 派生类的生成过程 派生类的生成过程 访问权限控制 继承方式,是对派生类中从基类所继承成员的进一步的限制。有三种: 公有(public)方式,亦称公有继承; 保护(protected)方式,亦称保护继承; 私有(private)方式, 亦称私有继承。 不论哪种继承方式,派生类新定义成员均不能直接访问基类的私有成员,只能通过基类的公有成员函数或保护成员函数访问基类的私有数据成员,而基类的私有成员函数根本就不会继承,更谈不上使用。所以,除非仅限于本类使用,否则,一般不将基类成员函数定义为私有成员。 继承的访问权限控制 访问限定符有两方面含义: 派生类成员(新增成员)函数对基类(继承来的)成员的访问(调用和操作) 。 从派生类对象之外对派生类对象中的基类成员的访问。 派生类中从基类所继承成员的访问权限列表 派生类的构造函数 派生类构造函数的一般格式如下: 派生类的构造函数 派生类构造函数各部分的执行次序为: 1.调用基类构造函数,按它们在派生类定义的先后顺序,顺序调用。 2.调用成员对象的构造函数,按它们在类定义中声明的先后顺序,顺序调用。 3.派生类的构造函数体中的操作。 派生类的构造函数 只要基类未使用缺省构造函数,在派生类构造函数中,都要显式给出基类名和参数表。 如果基类没有定义构造函数,则派生类也可以不定义,全部采用系统给定的缺省构造函数。 如果基类定义了带有形参表的构造函数时,派生类就应当定义构造函数。 派生类的析构函数 由于基类的析构函数也不能被继承,因此,派生类的析构函数必须通过调用基类的析构函数来做基类的一些清理工作。 调用顺序是:先调用派生类的析构函数,再调用对象成员类的析构函数(如果有对象成员),最后调用基类的析构函数,其顺序与调用构造函数的顺序相反。 //例 圆类 Circle1 的定义 #define PI 3.142 class Circle1 { protected: double x,y,r,s; //被保护成员 public: Circle1(double x1,double y1,double r1) //构造函数1 { x=x1; y=y1; r=r1;} Circle1(double r1) { x=0; y=0; r=r1;} Circle1( Circle1 p) { x=p.x; y=p.y, r=p.r;} void print() {cout圆心:(x,y)endl; cout半径:rendl; } double Area( ) { s=PI*r*r; return s;} }; 例 在已定义圆类 Circle1 的情况下,定义圆柱类: 由圆类派生出圆柱体类。 class Cylinder1:public Circle1 //派生类的定义——公有继承 { protected: double h; //派生类新增成员 public: //派生类的构造函数 Cylinder1(double x1,double y1,double r1, double h1):Circle1(x1,y1,r1) { h=h1;} Cylinder1(double r1,double h1):Circle1(r1) { h=h1;} void print() {Circle1::print(); cout圆柱高:hendl; } double Area( )

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档