переменная field и метод void change_field(). Есть классы B и C которые наследуют от A, переопределяют у себя change_field() и что то делают с базовым field.
Нам нужно создать миксин D из B и C. Несколько вопросов, взаимосвязанных друг с другом:
- Как в этом случае будет разрешаться наследование под капотом? У нас будет 2 копии A (для B и для C) или одна, которая используется и B и C?
- Если мы в D напрямую поменяем field - он изменится в B и в C или только в первом от которого наследуют? Или мы не можем вытащить атрибуты родителя в случае такого наследования без явного указания родителя?
- Аналогично - если мы переопределим change_field() в D и в нем вызовем B.change_field() - С.field изменится?
По вопросам: Если наследуемся как public virtual A, то будет один класс A. Иначе две копии A. Поля field нет в B и C, только в A. Если не использовать виртуальное наследование и есть дублирование A, то, вроде, можно обратиться к конкретному члену как B::field или C::field. Аналогично предыдущему.
Там немного не так...
Обсуждают сегодня