c ++具有相同变量名的多个父项

时间:2012-09-03 23:33:47

标签: c++ inheritance multiple-inheritance

class A{
    protected:
    int var;
};

class B{
    protected:
    int var;
};

class C : public A, public B {};

这里发生了什么?变量合并吗?我可以调用一个特定的,例如B :: var = 2等。

3 个答案:

答案 0 :(得分:10)

您的班级C会有两个变量,B::varA::var。在C之外,您可以像这样访问它们(如果您更改为public:),

C c;
c.A::var = 2;

尝试访问c.var会导致错误,因为没有名称为var的字段,只有A::varB::var

C内,他们的行为与常规字段相同,名称为A::varB::var

答案 1 :(得分:2)

如果你只引用var内的C,编译器不知道你的意思是A::var还是B::var,编译器会告诉你var是不明确的。因此,在使用var时必须完全限定名称。

不会发生合并,C的任何实例都将包含这两个变量。

答案 2 :(得分:1)

您可以分别通过A::varB::var在C级访问它们。

Here是一个涵盖同一问题的链接。