以下代码来自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
?
答案 0 :(得分:2)
为什么这是两个子对象的情况,而不是歧义的情况
因为有两个不同的子对象,如果需要,我们可以单独解决。
如果有两个子对象,那么在main中调用哪些子对象的foo?
属于ResolvableBase
的人,正如你明确要求的那样:
o.ResolvableBase::foo(); // OK.
~~~~~~~~~~~~~~ ← Here