【问题标题】:C++: Diamond concernsC++:钻石问题
【发布时间】:2012-01-11 17:54:47
【问题描述】:

简单的问题: 这种层次结构会导致 DP 吗?

//Abstract base class
class A {
    //Implement pure virtual methods with a default definition.
    //Pure virtual methods are still declared pure virtual.
};

//Abstract derived class
class B : public A {
    //Define pure virtual methods with a default definition.
    //Pure virtual methods are still declared pure virtual.
};

//Abstract base class
class C {
    //Define pure virtual methods with a default definition.
    //Pure virtual methods are still declared pure virtual.
};

//Concrete class
class D : public B, public C {
    //Implement all methods from D, B, and C
};

【问题讨论】:

    标签: c++ diamond-problem


    【解决方案1】:

    没有。画图;所有的碱基都是独一无二的:

    A
    |
    V
    B   C
     \ /
      V
      D
    

    “钻石问题”仅适用于由于多个重复基类而导致的不明确基类,例如如果D 是从A -> B 和A -> C 派生的:

    No-diamond-problematic:                 Virtually-inherited diamond:
    
            A   A                                         A
            |   |                                       v/ \v
            B   C                                       B   C
             \ /                                         \ /
              V                                           V
              D                                           D
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-04
      • 2020-10-03
      相关资源
      最近更新 更多