class A{
protected:
int var;
};
class B{
protected:
int var;
};
class C : public A, public B {};
这里发生了什么?变量合并吗?我可以调用一个特定的,例如B :: var = 2等。
答案 0 :(得分:10)
您的班级C
会有两个变量,B::var
和A::var
。在C
之外,您可以像这样访问它们(如果您更改为public:
),
C c;
c.A::var = 2;
尝试访问c.var
会导致错误,因为没有名称为var
的字段,只有A::var
和B::var
。
在C
内,他们的行为与常规字段相同,名称为A::var
和B::var
。
答案 1 :(得分:2)
如果你只引用var
内的C
,编译器不知道你的意思是A::var
还是B::var
,编译器会告诉你var
是不明确的。因此,在使用var
时必须完全限定名称。
不会发生合并,C
的任何实例都将包含这两个变量。
答案 2 :(得分:1)
您可以分别通过A::var
和B::var
在C级访问它们。
Here是一个涵盖同一问题的链接。