1 继承概念
对于继承,我们可以形象的理解为是一种父子的关系,子类继承父类(就像是孩子继承了父亲的某些特征),是C++的一种特性。
通过继承可以提高程序的可复用性。
被继承的类我们称之为父类(基类),继承的类称为子类(派生类)。
在C++中既可以单继承,即每次只继承一个类(可以多次继承);也可以多继承,即每次可继承多个类。
如何理解可复用性?
(1)定义了一个函数,每次需要借助该函数的功能的时候,不需要自己再写一段代码,只需要去调用它就可以,这其实就是一种复用,减少了代码的冗余。
(2)对于一个类A,如果类B是在类A的基础上进行扩展的,那我们就不再需要重新定义类A中的一些结构,而是可以通过继承的方式,继承类A中的成员变量和成员函数,如果自己还有其它需求则可以自己再在B中定义。所以可以说,继承是实现了类级别的复用。
2 继承的三种方式
继承的三种方式:公有继承public、保护继承protected、私有继承private
类的成员的三种访问限定符:公有的pubic、保护的protected、私有的private
我们都知道,对于公有成员既可以在类内访问也可以在类外访问,对于保护和私有的成员都只能在类内访问,不能在类外面进行访问,那么protected和private访问限定符有什么区别呢?
我们先看一张表:
可以看到对于public和protected成员,在不同的继承方式下,其访问限定都是变为较小的范围,但是对于private成员,不论在哪种继承方式下,都是不可见的。
什么叫“不可见”?不可见就是指,不论在类内还是类外都没有办法访问它,但该成员仍然是存在的,
【总结】在继承的下,public成员既可以在类内访问,也可以在类外访问;
protected成员可以在类内访问,但是不能在类外访问;
private成员在类内、类外都不可以访问。
3 定义派生类
定义派生类:
单继承 class 派生类类名:继承方式 基类类名
多继承 class 派生类类名:继承方式1 基类类名1,继承方式2 基类类名2,… …
4 基类和派生类 “切片”
两个问题
(1)基类对象能不能赋给派生类对象?
不能,基类里面的成员派生类中一定有,但是派生类中的成员基类中不一定有,所以不能直接赋值。 (编译不通过,提示语法错误)
基类的指针能不能赋给派生类的指针?
不能,但对基类进行强转可以。
基类的指针能不能赋给派生类的引用?
不能,但对基类进行强转可以。
(2)派生类对象/指针/引用能不能赋给基类对象/指针/引用?
可以,派生类中有基类的成员,派生类赋给基类相当于将派生类的一部分成员切片给基类。