两个基础子对象与歧义

时间:2015-12-13 21:23:34

标签: c++ inheritance

以下代码来自this帖子:

struct Base
{
    Base( int ) {}
    void foo() const {}
};

struct Intermediate: Base
{
    Intermediate( int x )
        : Base( x )
    {}
};

struct ResolvableBase: Base
{
    ResolvableBase( int x ): Base( x ) {}
};

struct Derived: Intermediate, ResolvableBase
{
    Derived( int x )
        : Intermediate( x )
        , ResolvableBase( x )
    {}
};

int main()
{
    Derived o( 667 );
    o.ResolvableBase::foo();    // OK.
} 

此代码的作者似乎声称o有两个Base子对象。为什么这是两个子对象的情况,而不是模糊的情况(在这种情况下gcc会警告无法访问的基类)?另外,如果有两个子对象,那么在foo中调用哪些子对象的main

1 个答案:

答案 0 :(得分:2)

  

为什么这是两个子对象的情况,而不是歧义的情况

因为有两个不同的子对象,如果需要,我们可以单独解决。

  

如果有两个子对象,那么在main中调用哪些子对象的foo?

属于ResolvableBase的人,正如你明确要求的那样:

o.ResolvableBase::foo();    // OK.
  ~~~~~~~~~~~~~~ ← Here