- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第11章 类的继承与多态 主讲人:XXX 第11章 类的继承与多态 面向对象编程基于三个基本概念:数据封装、继承和多态。 在C++中用类进行数据封装。 用类派生从一个类继承另一个类:派生类继承基类的成员。 多态使编译器能够在运行时决定是使用基类中定义的函数还是派生类中定义的函数。 第11章 类的继承与多态 本章主要内容: 11.1继承与派生 11.2继承的访问控制 11.3派生类的构造函数与析构函数 11.4多重继承 11.5多态性概述 11.6编译时的多态性与运行时的多态性 11.7运算符重载 11.8虚函数 11.9纯虚函数和抽象类 继承机制克服了传统程序设计方法的缺点—— 对编写出来的程序无法重复使用而造成资源的浪费。 给我们提供了无限重复利用程序资源的途径。 11.1.1类的层次结构 类的继承与派生概念反映了客观世界中事物的层次关系。 11.1.2派生类对象结构 从一个已有类派生出一个新类的定义格式为: class 派生类名 :继承方式 基类名 { 派生类新成员; }; 继承方式用于规定基类成员在派生类中的访问权限。 继承方式有三种:public、private和protected,最常用的方式是public。 11.1.2派生类对象结构 如果,Base是基类, 声明如下: class Base { private: int x; public: …… }; 11.1.2派生类对象结构 通过派生类建立的对象包括两部分内容, 一部分是基类部分,含有一个整型空间,另一部分是派生部分,含有两个整型空间,如图11-2所示。 11.1.3 继承基类成员 当派生类继承了基类以后,派生类就可以坐享其父类的公有和保护成员了。 比如,有一个学生类Stu,现在要建立一个研究生类Grd_stu。 研究生类除了具有自己的特点外,还具有学生类的所有性质。 这时,我们可以通过类的继承来实现。 11.1.3 继承基类成员 【例11.1】派生类对基类成员的继承 11.1.3 继承基类成员 11.1.3 继承基类成员 11.1.3 继承基类成员 程序运行的结果如图11-3所示: 11.2继承的访问控制 11.2.1类内的访问控制 11.2.2继承访问控制 11.2.1类内的访问控制 继承可以公有继承,也可以保护继承和私有继承,多数情况下是公有的。 继承了基类,并不是说派生类就能访问基类的所有成员了,基类的私有成员是不能访问的。 11.2.1类内的访问控制 一个类,将允许外界访问的操作都公有化; 将所有不能被外界访问的成员都私有化; 将不允许外界访问却允许其派生类访问的成员设置为保护的类型。 继承可以公有继承,也可以保护继承和私有继承,多数情况下是公有的。 继承了基类,并不是说派生类就能访问基类的所有成员了,基类的私有成员是不能访问的。 11.2.2继承访问控制 三种不同的继承方式的基类特性和派生类特性。 11.3派生类的构造函数与析构函数 11.3.1派生类构造函数与析构函数的执行顺序 11.3.2派生类构造函数构造规则 11.3.1派生类构造函数与析构函数的执行顺序 构造函数不能够被继承 。 派生类的构造函数必须通过调用基类的构造函数来初始化基类中的数据成员。 析构函数也不能被继承 。在执行派生类的析构函数时,基类的析构函数也将被调用。 执行顺序是是先执行派生类的构造函数,再执行基类的析构函数,其顺序与执行构造函数时的顺序正好相反。 11.3.1派生类构造函数与析构函数的执行顺序 【例11.4】派生类的构造函数与析构函数的执行过程 #include iostream.h class Base { public: Base() //基类构造函数 { cout Base constructing... endl; } ~Base() //基类析构函数 { cout Base destructing ... endl; } }; 11.3.1派生类构造函数与析构函数的执行顺序 class Derived : public Base { public: Derived() //派生类构造函数 { cout Derived constructing... endl; } ~Derived() //派生类析构函数 { cout Derived destructing... endl; } }; int main() { Derived d_obj; return 0; } 11.3.1派生类构造函数与析构函数的执行顺序 程序运行结果如图11-5所示: 11.3.2派
文档评论(0)