C++ Class Inheritance
Contents
Access Modifiers
public
: 成员可以被任意地方访问,包括类的外部protected
: 成员可以被类本身及其子类访问private
: 成员只能被类本身访问
We can use different modifier to modify super class and different modifier has different effect
- public inherite: 基类的 public 和 protected 成员在派生类中保持为 public 和 protected
- protected inherite: 基类的 public 成员变为 protected,protected 成员保持 protected
- private inherite(default): 基类的所有 public 和 protected 成员在派生类中都变为 private
Template Inheritance
当一个模板类继承另一个模板类时,被继承类中的非静态成员变量或函数被称为依赖名称(dependent name)。这些名称依赖于模板参数的具体类型,编译器无法在初始模板定义阶段解析它们(更专业化的说法是:模板的解析规则中,基类成员的依赖名称不会隐式添加到派生类的作用域中, 在非模板类的继承中,基类的 public
和 protected
成员会自动被添加到派生类的作用域中)。
因此在派生类中直接使用这些变量或函数(此时还没有进行模版实例化),编译器是无法确定这些变量是来自于基类的。
有 3 种方法解决此问题:
使用
this->
明确指定变量或函数是从当前类或其基类中继承的成员使用基类限定名:
superClass<T>::variable
将基类成员引入派生类作用域
|
|
总的来说,这部分内容涉及到对于模版设计思想的深度理解,由于目前尚未遇到具有足够应用深度的场景,因此部分内容暂时按下不表。