这是多重继承的示例。我使用范围解析运算符而不是虚拟类来解决歧义。
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;
}
Is B::i
格式良好?
Is B::i
格式良好?
是的。最相关的参考是[等级.质量]/1:
如果限定 ID 的嵌套名称说明符指定一个类,则
在中查找嵌套名称说明符后指定的名称
类的范围,除了下面列出的情况。名字
应代表该类别或其其中之一的一名或多名成员
基类.
其中指定您可以命名i
由于它是以下组织的成员B
的基地。仅在事后检查可访问性,并且在您的情况下它是公开的。
[类.访问.基础]/5
...对成员的访问受到该成员所在类的影响
成员被命名。这个命名类是成员所在的类
名称被查找并找到...此时可以访问成员 m
R 当在 N 类中命名时,如果
- 存在可在 R 处访问的 N 的基类 B,并且当在类 B 中命名时,可在 R 处访问 m。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)