Вам понадобится чистый интерфейс. Поскольку Base2
никоим образом не связан с Base1
в вашем примере, зависимость, которую вы описываете, должна быть частью его интерфейса с внешним миром. Это не деталь реализации.
Таким образом, правильным решением было бы предоставить явный (я не имею в виду ключевое слово) конструктор:
Base2(int a) : b(a*2) {}
Для Derived
вы тогда get:
Derived() : Base1(), Base2(a) {}
Обратите внимание, что Base1
инициализируется до Base2
, и поэтому a
уже доступен.