我了解C++虚拟继承的基础。但是,我对于需要在复杂的类层次结构中使用virtual关键字的确切位置感到困惑。例如,假设我有以下类(class):

            A
           / \
          B   C
         / \ / \
        D   E   F
         \ / \ /
          G   H
           \ /
            I

如果我要确保在任何子类中没有一个类出现多次,那么哪个基类需要标记为virtual?他们都是?或者仅在直接从可能具有多个实例的类(即B,C,D,E和F;以及G和H(仅与基类E一起使用,而不与基类D和F))?

最佳答案

从A,B,C和E类(位于菱形顶部)继承时,必须指定virtual继承。

class A;
class B: virtual A;
class C: virtual A;
class D: virtual B;
class E: virtual B, virtual C;
class F: virtual C;
class G:         D, virtual E;
class H: virtual E,         F;
class I:         G,         H;

关于c++ - 在复杂的多继承层次结构中, “virtual”关键字在哪里需要?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3414639/

10-12 16:08