以下是多重继承的示例。我使用范围解析运算符来解决歧义,而不是虚拟类。
struct A
{
int i;
};
struct B : A
{};
struct C : A
{};
struct D: B, C
{
void f()
{
B::i = 10;
}
void g()
{
std::cout << B::i <<std::endl;
}
};
int main()
{
D d1;
d1.f();
d1.g();
return 0;
}
B::i
格式正确吗?
答案 0 :(得分:5)
B::i
格式正确吗?
是的,确实如此。最相关的参考是[class.qual]/1:
如果qualified-id的嵌套名称说明符指定了一个类,那么 在查找嵌套名称说明符后指定的名称 除下列案例外,该类的范围。 这个名字 应代表该类别或其中一个成员的一个或多个成员 基类。
其中指定您可以将i
命名为B
的基础成员。之后只会检查可访问性,在您的情况下它是公开的。
...对成员的访问受到其中的类的影响 成员被命名。这个命名类是成员所在的类 查找并找到了名称...此时可以访问成员m 如果
,则在N类中命名时为R.
- 存在可在R处访问的N的基类B,并且当在B类中命名时,m可在R处访问。