如何覆盖继承的嵌套类中存在的虚拟方法
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?
【问题讨论】:
请澄清。C
和 B
之间或 B
和 A
之间没有关系。由于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
;
C
和B
之间没有继承关系,因此D
和A
之间也没有继承关系。 D
和 A
不是同一个类层次结构的一部分。
因此,让D
覆盖A
的成员函数是没有意义的。
【讨论】:
以上是关于如何覆盖继承的嵌套类中存在的虚拟方法的主要内容,如果未能解决你的问题,请参考以下文章