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.
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.
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
.
You can access them in class C by A::var
and B::var
respectively.
Here is a link that covers the same problem.
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.