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 的精神时光屋!