наследование — c ++ Несколько родителей с одинаковым именем переменной

class A{
protected:
int var;
};

class B{
protected:
int var;
};

class C : public A, public B {};

Что здесь происходит? Переменная сливается? Могу ли я назвать один в конкретном, например, B :: var = 2 и т. Д.

8

Решение

Ты класс 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,

10

Другие решения

Если вы ссылаетесь только на var Внутри C, компилятор не знает, имеете ли вы в виду A::var или же B::var и компилятор скажет вам, что var неоднозначно. Таким образом, вы должны полностью указать имя при использовании var,

Слияние не происходит, любой экземпляр C будет содержать обе переменные.

2

Вы можете получить к ним доступ в классе C по A::var а также B::var соответственно.

Вот это ссылка, которая охватывает ту же проблему.

1
По вопросам рекламы [email protected]