以下代码来自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
? 最佳答案
因为有两个不同的子对象,所以我们可以根据需要分别处理。
正如您明确要求的那样,其中一个属于ResolvableBase
:
o.ResolvableBase::foo(); // OK.
~~~~~~~~~~~~~~ ← Here