[工程科技]CPP课件 05.ppt

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

第五章 继承与派生 5.1 继承与派生的概念 5.2 派生类的声明方式 ★ 5.3 派生类的构成 ★ 5.4 派生类成员的访问属性 ★ 5.5 派生类的构造函数和析构函数 ★ 5.6 多重继承 5.7 基类与派生类的转换 5.8 继承与组合 5.9 继承在软件开发中的重要意义 5.1 继承与派生的概念 单继承 派生类只从一个基类派生。 多重继承 派生类从多个基类派生。 多重派生 由一个基类派生出多个不同的派生类。 多层派生 派生类又作为基类,继续派生新的类。 5.2 派生类的声明方式 5.3 派生类的构成(P154三点) 5.4 派生类成员的访问属性 5.4.1 公用继承 5.4.2 私有继承 5.4.3 保护成员和保护继承 5.4.4 多层派生时的访问属性 5.5 派生类的构造函数和析构函数 5.5.1 简单的派生类的构造函数 5.5.2 有子对象的派生类的构造函数 5.5.3 多层派生时的构造函数 5.5.4 派生类构造函数的特殊形式 P175 5.5.5 派生类的析构函数 5.6 多重继承 5.6.2 多重继承时,派生类的构造函数 5.6.3 多重继承时,引起的二义性问题 5.6.4 虚基类 5.7 派生类与基类的转换 5.9 继承在软件开发中的重要意义 思考下列问题: (1) 每个类有自己的析构函数,用于释放自身; (2) 子类不能继承父类的析构函数; (3) 但子类继承了父类的所有数据资源; (4) 所以:子类在析构时,不仅要释放自身资源,还要释放从父类继承来的资源; (5) 对于问题(4):前者简单,后者如何释放? (6) 解决方法:在子类的析构函数中,调用父类的析构函数。 一个子类,由多个父类派生而来。 5.6.1 多重继承的声明方法 class D: public A, private B, protected C {类D新增加的成员} 则 D 类由A、B、C同时派生而来。 前述例5.5,是“单继承”时的情形: class Student {public: Student(int n, string nam, char s) { …… } private: …… }; class Student1: public Student {public: Student1(int n, string nam, char s, int a, string ad):Student(n, nam, s) { age = a; addr = ad; } private: int age; string addr; }; 若Student1有多个父类, 参数列表该如何写? 参照P177倒数5、6行, Graduate有两个父类:Teacher和Student …… …… 用域运算符做限定 问题引入,设: 问题:通常不希望保留多份拷贝 解决办法:使用虚基类 class A //基类A {…}; class B : virtual public A //公用派生,且A是B的虚基类 {…}; class C : virtual public A //公用派生,且A是C的虚基类 {…}; 需注意的问题: 1,基类必须声明为所有直接派生类的虚基类 如图所示,将仍有2份来自A的拷贝 需注意的问题: 2,最后派生类必须负责初始化基类数据成员 如图,D中只有一份来自A的数据成员,无法像5.5节所述那样,由D传给BC的构造,然后BC再传给A的构造。 只能由D直接传给A的构造,对A继承给D的成员做初始化。 C++规定:最后的派生类,不仅要负责对直接基类初始化,还要负责对虚基类初始化。 需注意的问题: 3,基类构造函数调用次数仅1次,不会多次 如图,如2所述,D必须直接调用A的构造。 且D还要调用BC的构造,而BC的构造又将各自调用1次A的构造。 那么,A的构造是否会调用3次?数据成员被初始化3次? C++规定:编译器只执行最后派生类对虚基类的构造函数调用,忽略虚基类其它直接派生类对其构造的调用。 但强烈建议,仍然按照派生类构造函数的统一格式书写。P187 举例: class Person {public: Person(string nam,char s,int a) {name=nam;sex=s;age=a;} protected: string name; char sex; int age; }; class Teacher

文档评论(0)

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

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

1亿VIP精品文档

相关文档