众所周知,C++的三个特性是封装,继承,多态。今天我们就来看第二个特性——继承。
继承,从生活的角度来看,就是父亲和母亲生了个孩子,这个孩子肯定会遗传父亲或者母亲的一些特征,继承他们的一些的特点,再组合自己本身的特点,形成个性鲜明的自己。
而C++的继承也是类似的,由父类生成子类,或者说由基类生成派生类(这个就是比较官方的叫法了)。同样,在继承的过程中,子类(派生类)会延续父类(基类)的一些特点,同时形成自己的东西,组合成为新的具有一些父类特点的新类。
(1)继承的概念
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。
(2)继承的形式
class DeriveClassName : 继承类型 父类名称
注意:在class下,若没有给出继承类型,默认为private。
(3)继承关系和访问限定符
在不同的继承方式和不同的类成员访问限定符下,我们所得的派生类中的成员变量和成员函数的访问权限也不同,下表就是对以上问题的总结:
(4)注意事项
1. protected的成员访问限定符是因继承才出现的。正常情况下,private类型成员在派生类中不可见,当然在类外不能直接访问;而public类型成员在派生类中仍为公有成员,在类外是可被直接访问的;我们如果想有一种类型的成员可以在派生类中访问,但不能在类外访问,那就只有保护类型。
2. public继承是一个接口继承,父类和子类保持is-a的形式,每个父类可用的成员对子类也可用,因为每个子类的对象也是父类的对象,即可以通过子类的对象来访问父类的成员变量。
3. protected/private继承是一个实现继承,父类和子类保持has-a的形式,基类的部分成员并未成为子类的接口。
4. 一般情况下,我们使用公有继承方式,不会使用保护继承和私有继承方式。
5. 不管是哪种继承方式,基类的公有成员和保护成员都可以在派生类中被访问,但是基类的私有成员在派生类中为不可见,即不能在派生类中访问基类的私有成员。
6. 使用关键字class时默认的继承方式是private,使用struct时默认的继承方式是public,不过最好显示的写出继承方式。
今天的内容完了,下节会继承再剖析。