06 - 普通继承及其实现原理

C++面向对象的三大特性:封装,继承和多态。本文主要讲了C++普通继承和实现原理。

介绍

如果要基于某个类去编写另一个类,或者对某个类进行少量修改,用继承即可。

例如,在游戏中有个叫做Spare的“基”道具,把他写成一个类,然后用两个子类去写出实际上用到的道具:

class Spare
{
private:
    std::string name;
    std::string desc;
};

// 通过继承的方式编写一个类
class FireSpare : public Spare
{
    // ...
};

class IceSpare : public Spare
{
    // ...
};

原理

类的构造

在创建一个类对象时,C++定义了如下创建顺序:

  1. 如果该类有父类,则先执行父类的默认构造函数。
  2. 类的非静态数据成员按章声明的顺序创建。
  3. 执行该类的构造函数。

可以递归地使用这些规则。

类的析构

由于析构函数没有参数,可以始终自动调用父类的析构函数,顺序与构造函数相反:

  1. 调用该类的析构函数。
  2. 销毁该类的数据成员,销毁顺序与创建的顺序相反。
  3. 如果有父类,调用父类的析构函数。

也可递归使用这些规则。

参考资料

  • 飘零的落花 - 现代C++详解
  • C++20高级编程