您的位置:首页 > 编程语言 > C语言/C++

【一天一篇CPP】继承和派生:基础知识和继承方式与访问属性

2013-10-10 13:25 453 查看
1.介绍:面向对象程序设计的4个特点:抽象、封装、继承、多态性。

C++中的可重用性是通过继承这一机制来实现的。【父类派生出子类,子类继承于父类】。

派生类是基类的具体化,基类是派生类的抽象。

2.形式:在类的声明处

class 派生类名 : [ 继承方式 ] 基类名

{

............//派生类新增加的成员

};

继承方式有:public(公用的),private(私有的)/protected(受保护的),当不写的时候默认为private(私有的)。

3.构建一个派生类的3个工作:

A 从基类接收所有成员(除构造和析构函数)【需要选择适合的基类,来避免多次派生后对象中的大量冗余数据】

B 调整接收的成员 【通过继承方式的不同,可改变基类成员在派生类中的访问属性,将在下面第5点讲解】,此外可以通过同名成员去覆盖(取代)继承来的数据成员和函数成员【对于函数成员,需要参数也一致,否则是重载而不是覆盖】

C 在声明派生类时增加它自己的成员,还要加上它自己的构造函数和析构函数。

4.派生类的访问属性

A 基类的成员函数访问基类成员【可访问】

B 派生类的成员函数访问派生类中新增加的成员【可访问】

C 基类的成员函数访问派生类的成员【不可访问,因为派生类对于基类是不可知的】

D 通过派生类的对象直接访问派生类的成员【只可以访问公有成员】

E 派生类的成员函数访问基类的成员。【要看继承方式成员在基类的访问属性,将在下面第5点讲解】

F 通过派生类对象直接访问基类的成员。【要看继承方式成员在基类的访问属性,将在下面第5点讲解】

5.三种继承方式详解:

A 公有继承(public inheritance)基类的公有成员和保护成员在派生类中保持原有访问属性【也就是派生类的成员函数可以访问它们,而通过派生类的对象,只能访问其中的公有的】,私有成员仍为基类私有【只有基类函数成员才能访问】。

B 私有继承(private inheritance)【少用】基类的公有成员和保护成员变为私有成员【派生类的成员函数可访问,但是派生类对象不能直接访问】,私有成员仍为基类私有【只有基类函数成员才能访问】。

C 保护继承(protected inheritance)基类的公有成员和保护成员在派生类中都变为保护成员【派生类的成员函数可以访问它们,通过派生类的对象则不可以】,私有成员仍为基类私有【只有基类函数成员才能访问】。 【保护的设计初衷:不能被外界通过类对象引用,但是能被派生类的成员引用】

6.疑难解答:

A CPP允许多级继承吗?

允许,例如A <- B <- C指的是B派生于A,C派生于B。B是A的直接派生类,C是A的间接派生类。访问属性依次递归下去。

例如A的公有成员通过私有继承,到了子类B就是私有成员,不论通过什么类型的继承,B的子类C都不能直接访问这个在A中的公有成员,至于C能否访问B中的某些成员,都是类似,要依据它们之间的继承方式和B中的成员访问属性决定。

B CPP允许多继承吗?

允许,如 class menuWindow: public window,public menu

{

...........//新增加的成员

};

C.cpp经常通过继承和组合实现软件重用,那么什么是组合?一个类以另一个类的对象作为数据成员,则称为类的组合。

继承和组合是软件重用的重要方式,但组合强调“拥有什么”,而继承强调“是什么”。

D.一些编译的提示:

假如基类的实现单独存在于一个文件,由于基类是单独编译的,编译程序的时候只需要对派生类的新增功能进行编译。但假如修改基类,基类和派生类都要重新编译。因此常常将基类的实现单独放置在一个文件,而减少重新编译的时间。【类库也是类似的,类的声明放在一个头文件,然后实现放在另一个文件或以编译完的目标代码形式存在】

F.软件开发中尽可能地通过继承一批新的类,而不是对已有类加以修改的原因:

A基类的改变会牵涉到很多派生类的内容改变,可能导致很多错误发生

B用户往往不能得知基类的源代码【为了软件开发的保密】

C基类常常就是通用的框架或抽象类,不怎么需要修改

D修改基类容易破坏原有类功能的规划和软件系统的层次关系。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐