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

第章_继承和多重继承.ppt

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

第4章 继承和多重继承 一、继承的概念 二、派生类的生成过程 三、继承方式对基类成员的访问控制 四、派生类的构造函数和析构函数 五、虚基类 六、虚基类机制下的构造函数的执行顺序 一、继承的概念 1、 单继承 2、 多继承 3 、访问方式 继承的概念 举例: 具体代码: enum Sex{male,female}; enum Color{black,yellow,white}; class Person { int age; Sex sex; Color color_of_skin; //… public: int GetAge() { return age; } void SetAge(int a) { age=a; } Sex GetSex(Sex s) { sex=s; } Color GetColor(Color c) { return color_of_skin; } void SetColor(Color c) { color_of_skin=c; } void Walk_Z( ) { //… } void Think() { //… } //… }; class BlackPerson:public Person { public: BlackPerson() { SetColor(black); } //... }; 一、继承的概念 从已定义类(数据类型)中导出新类(新数据类型)时,新类具有原有类的所有的属性和方法。 1、 单继承 1)语法格式 2)举例 1、 单继承 1)继承的语法格式(工作方式): class 父类名 { //… }; class 子类名:public 父类名 { //… }; 1、 单继承 2)举例: a)上例中的Person类与BlackPerson类 b) class Student //学生类———父类(基类) { //... }; class GraduateStudent:public Student //研究生类———子类(派生类) { //... }; 2、 多继承 指子类从多个父类中派生而来 语法格式: class 子类名:访问方式 基类名1,访问方式 基类名2,…… { 派生类中的新成员 }; 3 、访问方式 public protected private 二、派生类的生成过程 1、 吸收基类成员 2、 改造基类成员 3 、添加新成员 1、 吸收基类成员 派生类继承吸收了基类的全部数据成员以及除了构造函数、析构函数之外的全部函数成员。也就是说,基类中的构造函数和析构函数是不能继承到派生类中的 2、 改造基类成员 二个方面的改造:一是对基类成员的访问方式问题,这由派生类定义时的访问方式来控制;二是对基类数据成员或成员函数的覆盖,也就是在派生类中定义了与基类中同名的数据成员或函数成员,由于作用域不同,于是发生同名覆盖,基类中的成员就被替换成派生类中的同名成员。 3 、添加新成员 在派生类中,除了从基类中继承过来的成员外,还可以根据需要在派生类中添加新的数据成员和成员函数,以实现必要的新功能,可以看出,在派生类中可以添加新成员的机制是继承和派生机制的核心,保证了派生类在功能上比基类有所发展。 三、继承方式对基类成员的访问控制 继承方式有三种:public private protected,不同的继承方式会导致原来具有不同访问属性的基类成员在派生类中的访问属性也有所不同。这种访问包括两个方面:一是派生类中新增成员对从基类继承来的成员的访问;二是在派生类的外部通过派生类的对象对从基类继承来的成员的访问。 1 公有继承 2 私有继承 3 保护继承 参见下表: 存取方式与继承的关系: 例如: class Base {public: int m1; protected: int m2; private: int m3; }; class PrivateClass:private Base {public: void test() {m1=1;m2=2;m3=3;} }; class DerivedFromPri:public PrivateClass {public: void test() {m1=1; m2=2;m3=3;} }; class ProtectedClass:protected Base {public: void test() {m1=1;m2=2;m3=3;} }

文档评论(0)

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

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

1亿VIP精品文档

相关文档