class A{
protected:
int var;
};
class B{
protected:
int var;
};
class C : public A, public B {};
Что здесь происходит? Переменная сливается? Могу ли я назвать один в конкретном, например, B :: var = 2 и т. Д.
Ты класс 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
,
Если вы ссылаетесь только на var
Внутри C
, компилятор не знает, имеете ли вы в виду A::var
или же B::var
и компилятор скажет вам, что var
неоднозначно. Таким образом, вы должны полностью указать имя при использовании var
,
Слияние не происходит, любой экземпляр C
будет содержать обе переменные.
Вы можете получить к ним доступ в классе C по A::var
а также B::var
соответственно.
Вот это ссылка, которая охватывает ту же проблему.