如何覆盖继承的嵌套类中存在的虚拟方法

Posted

技术标签:

【中文标题】如何覆盖继承的嵌套类中存在的虚拟方法【英文标题】:How to override virtual method present in inherited Nested Classes 【发布时间】:2019-12-20 09:13:54 【问题描述】:

如何覆盖继承的嵌套类中的虚方法? 代码片段:

class A

  public:
  virtual void foo();
;

class B

  public:
  class C: public A
  ;
;

class D: public B

    //How to override foo()`enter code here` method of class A here in class D?

【问题讨论】:

请澄清。 CB 之间或 BA 之间没有关系。由于D 不继承foo,因此您无需覆盖任何内容。 你好,C类(从A类派生)是B类的内部类。D类是从B类派生的。有一个内部和外部类以及继承混合 也许您对 Java 很熟悉,其中“内部”(或“嵌套”)类与周围的类有特殊关系,但 C++ 不是 Java。 【参考方案1】:

在大多数情况下,嵌套类的行为就像它们是在它们所嵌套的类之外定义的一样。

唯一的区别在于名称查找、可访问性和模板专业化。

尤其是嵌套类与其封闭类之间没有继承关系。

在你的例子中

class B

  public:
  class C: public A
  ;
;

是(除了如何找到C 的名字)等于:

class B

;

class C: public A

;

CB 之间没有继承关系,因此DA 之间也没有继承关系。 DA 不是同一个类层次结构的一部分。

因此,让D 覆盖A 的成员函数是没有意义的。

【讨论】:

以上是关于如何覆盖继承的嵌套类中存在的虚拟方法的主要内容,如果未能解决你的问题,请参考以下文章

具有覆盖函数的嵌套类的编译器错误 - Swift Xcode6

如何访问嵌套类中的私有类方法

如何使用new()调用嵌套类中的方法?

从继承的类中覆盖虚拟方法但保留基类的注释[重复]

在类中如何实现类的嵌套

覆盖继承的默认支持对象(如 dict、list)的嵌套 JSON 编码