C++ Class Inheritance

Access Modifiers

  1. public: 成员可以被任意地方访问,包括类的外部
  2. protected: 成员可以被类本身及其子类访问
  3. private: 成员只能被类本身访问

We can use different modifier to modify super class and different modifier has different effect

  1. public inherite: 基类的 public 和 protected 成员在派生类中保持为 public 和 protected
  2. protected inherite: 基类的 public 成员变为 protected,protected 成员保持 protected
  3. private inherite(default): 基类的所有 public 和 protected 成员在派生类中都变为 private

Template Inheritance

当一个模板类继承另一个模板类时,被继承类中的非静态成员变量或函数被称为依赖名称(dependent name)。这些名称依赖于模板参数的具体类型,编译器无法在初始模板定义阶段解析它们(更专业化的说法是:模板的解析规则中,基类成员的依赖名称不会隐式添加到派生类的作用域中, 在非模板类的继承中,基类的 publicprotected 成员会自动被添加到派生类的作用域中)。

因此在派生类中直接使用这些变量或函数(此时还没有进行模版实例化),编译器是无法确定这些变量是来自于基类的。

有 3 种方法解决此问题:

  1. 使用 this-> 明确指定变量或函数是从当前类或其基类中继承的成员

  2. 使用基类限定名: superClass<T>::variable

  3. 将基类成员引入派生类作用域

1
2
3
using superClass<T>::variable;

// 使用 variable

总的来说,这部分内容涉及到对于模版设计思想的深度理解,由于目前尚未遇到具有足够应用深度的场景,因此部分内容暂时按下不表。

0%