【问题标题】: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。

标签: c++ class inheritance nested


【解决方案1】:

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

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

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

在你的例子中

class B
{
  public:
  class C: public A
  {};
};

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

class B
{
};

class C: public A
{
};

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-27
    • 2014-08-21
    • 2018-07-26
    • 2021-11-30
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    相关资源
    最近更新 更多