概念:
保持已有类的特性而构造新类的过程。
继承的目的:
实现代码的重用和设计的重用。(比如继承一个抽象类是为了继承它的设计,抽象类并没有完全实现,但是把接口设计好了,剩下的要自己实现)
派生的目的:
当新问题出现,原有程序不能解决问题时,需要对原有程序进行改造。
继承方式:
- 一个派生类可以同时有多个基类,这是多继承。
- 除了基类的构造和析构函数不继承,其他所有基类的部分全部继承。
- 能用单继承解决的问题,尽量不用多继承。
派生类的生成过程:
- 吸收基类成员;
- 改造基类成员;(可以重写同名的函数,覆盖基类中的函数,数据成员也会隐藏基类中的数据成员)
- 添加新的成员。
公有继承:
基类的private成员不可直接访问,派生类只能通过基类中的public函数去访问这个私有成员。
派生类中的成员函数可以直接访问基类的public和protected成员,不能访问private成员。
通过派生类的对象只能访问基类的public成员。
保护成员:
横向来看,和private一样,不能在类外被访问。
纵向来看,在其继承家族中,对于其派生类来说,protected和public成员的性质是相同的。
类型兼容规则
一个公有派生类的对象在使用上能被当作基类的对象使用。具体表现在:
- 派生类的对象可以隐式转换成基类的对象;
- 派生类的对象可以初始化基类的引用;
- 派生类的指针可以隐式转换为基类的指针。
比如当需要一个基类对象的时候,都可以用派生类来代替,编译器会自动进行隐式转换。
基类的引用和指针都可以指向派生类的对象,但是这些基类的对象名和指针只能访问派生类中从基类继承过来的成员部分。
【注意】绝对不要重新定义继承而来的非虚函数!!想要在基类和派生类中实现类似功能的多态,可以用虚函数实现动态绑定!