C++继承详解
继承关系综述
继承方式
- 有三种方式继承
public继承、protected继承、private继承。 三种继承方式不会改变
直接派生类对基类中定义的成员的访问控制权限:直接派生类内部总能访问基类的public、protected成员。间接派生类对基类成员的访问就要取决于中间派生类的继承方式。
public 不改变基类定义的成员的访问权限。
基类定义的
public和protected成员在派生类中不变。外界可以访问基类的 public 成员。
protected 继承基类定义的成员的访问权限 >= protected 。
- 即基类中定义的
public成员变成在直接派生类中变成protected成员。 - 外部无法访问基类的成员。
间接派生类内部可以访问这个成员。
- 即基类中定义的
- private 继承基类中定义的成员的访问权限 >= private 。
- 即基类定义的
public和protected成员在派生类变成private成员。 - 外界不能访问基类的成员。
间接派生类内部不可以访问这个成员。
- 即基类定义的
- 有三种方式继承
虚函数与抽象类
虚函数是带有virtual关键字声明的成员函数。纯虚函数是指带有virtual关键字,并且后面还有=0的函数,纯虚函数是一种特殊的虚函数。- 有
纯虚函数的类称为抽象类,抽象类可以有不止一个纯虚函数。 抽象类不能直接实例化对象,只能作为基类被继承。- 如果一个派生类继承了一个或多个包含纯虚函数的基类,派生类必须定义所有这些纯虚函数才能实例化,否则该派生类本身也会被视为抽象类。
函数的重载与重写
重写时参数列表与基类虚函数必须相同,否则编译报错。参数列表不同的同名函数,即重载。
override 关键字
- 可以用
override关键字显式声明派生类要重写基类的虚函数。 - 只能在
重写基类虚函数的时候加 override,否则编译报错。
- 可以用
指针
- 不要用派生类指针指向基类指针。
- 基类指针指向派生类对象时,只能调用基类中有
声明的方法。 - 如果调用基类的
虚函数,且该虚函数被派生类重写,则调用的是派生类重写的函数。
示例代码
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Zephyrols 的精神时光屋!