欢迎来到天天文库
浏览记录
ID:45721989
大小:1.57 MB
页数:124页
时间:2019-11-17
《第11章继承与派生new》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第11章继承与派生第12章多态性与虚函数第13章输入输出流第14章C++工具第4篇面向对象的程序设计第11章继承与派生11.1继承与派生的概念11.2派生类的声明方式11.3派生类的构成11.4派生类成员的访问属性11.5派生类的构造函数和析构函数11.6多重继承11.7基类与派生类的转换11.8继承与组合11.9继承在软件开发中的重要意义面向对象程序设计有4个主要特点:抽象封装继承多态性面向对象技术强调软件的可重用性(softwarereusability)。C++语言提供了类的继承机制,解决了软件重用问题。在C++中可重用性是通过继承(inheritance)这一机
2、制来实现的。继承是C++的一个重要组成部分。在C++中,所谓“继承”就是在一个已存在的类的基础上建立一个新的类。见图11.1示意。11.1继承与派生的概念已存在的类(例如“马”)称为“基类(baseclass)”或“父类(fatherclass)”。新建立的类(例如“公马”)称为“派生类(derivedclass)”或“子类(sonclass)”。见图11.2示意。图11.1图11.2一个派生类只从一个基类派生,这称为单继承(singleinheritance),这种继承关系所形成的层次是一个树形结构,见下图。箭头表示继承的方向,从派生类指向基类。一个派生类不仅可以从一
3、个基类派生,也可以从多个基类派生。一个派生类有两个或多个基类的称为多重继承(multipleinheritance)。关于基类和派生类的关系:派生类是基类的具体化,而基类则是派生类的抽象。声明派生类的一般形式为:class派生类名:[继承方式]基类名{派生类新增加的成员};继承方式包括:public(公用的),private(私有的)和protected(受保护的),如果不写此项,则默认为private(私有的)。11.2派生类的声明方式派生类分为两大部分:一部分是从基类继承来的成员另一部分是在声明派生类时增加的部分每一部分均分别包括数据成员和成员函数。11.3派生类的
4、构成编制派生类时可分四步吸收基类的成员改造基类成员发展新成员重写构造函数与析构函数不论是数据成员,还是函数成员,除构造函数与析构函数外全盘接收声明一个和某基类成员同名的新成员,派生类中的新成员就屏蔽了基类同名成员称为同名覆盖(override)派生类新成员必须与基类成员不同名,它的加入保证派生类在功能上有所发展。构造一个派生类包括以下4部分工作:派生类对象结构对于下面的继承关系:classFather{inta,b;public://成员函数};classSon:publicFather{intc;public://成员函数};基类对象子类对象子类对象空间总是不小于基类
5、对象cabab基类部分子类添加部分11.4派生类成员的访问属性继承可以公有继承,保护继承和私有继承。公有继承是普通继承,基类可以为大多数应用服务。也可以重复继承。保护继承是“单传”继承,只继承给自己的后代,应用是以子孙的公有成员函数来对外展开服务的。私有继承是“绝版”继承,该基类只继承直接的子类,而不考虑让子类再继承下去。public继承:基类的public成员,在派生类中成为public成员基类的protected成员,在派生类中成为protected成员基类的private成员,在派生类中成为不可直接使用的成员11.4.1公有继承公有基类的成员私有成员公有成员保护成
6、员在公有派生类中的访问属性不可访问公有保护表11.1公用基类在派生类中的访问属性例:下面定义了两个具有单继承关系的类A和B,其中,A为基类,B为派生类:classA{intx,y;public:voidf();voidg();};classB:publicA{intz;public:voidh();};在C++中对派生类有以下几点规定:派生类除了拥有基类的所有成员(基类的构造函数和赋值操作符重载函数除外)外,也可以具有新的成员。classA{intx,y;public:voidf();voidg();};classB:publicA{intz;public:voidh(
7、);};voidmain(){Bb;b.f();//A类中的fb.g();//A类中的gb.h();//B类中的h}派生类的定义用于描述派生类与基类的差别。派生类中可以给出新的成员,也可以对基类的成员进行重定义。如果在派生类中对基类的某个成员进行重定义,则在派生类中对该成员的访问是针对派生类中重定义的成员。classB:publicA{intz;public:voidf();voidh(){f();//B类中的fg();//A类中的g}};voidmain(){Bb;b.f();//B类中的fb.g();//A类中的gb.h();//B类
此文档下载收益归作者所有