15
class A{
    protected:
    int var;
};

class B{
    protected:
    int var;
};

class C : public A, public B {};

What happens here? Do the variable merges? Can I call one in specific like, B::var = 2, etc.

nahpr
  • 619
  • 7
  • 15

3 Answers3

16

You class C will have two variables, B::var and A::var. Outside of C you can access them like this (if you change to public:),

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

Attempting to access c.var will lead to an error, since there is no field with the name var, only A::var and B::var.

Inside C they behave like regular fields, again, with the names A::var and B::var.

user1071136
  • 15,636
  • 4
  • 42
  • 61
2

You can access them in class C by A::var and B::var respectively.

Here is a link that covers the same problem.

Seçkin Savaşçı
  • 3,446
  • 2
  • 23
  • 39
2

If you only refer to var inside of C, the compiler does not know whether you mean A::var or B::var and the compiler will tell you that var is ambiguous. Therefore, you have to fully qualify the name when using var.

No merging happens, any instance of C will contain both variables.

Jesse Good
  • 50,901
  • 14
  • 124
  • 166