Предположим, у нас есть родительский класс A, который имеет защищенные члены x и y и конструктор:
A::A(int xpos, int ypos) : x(xpos), y(ypos) {}
Теперь рассмотрим, что у нас есть два класса B и C, которые наследуются от A и имеют конструкторы, как определено ниже.
class B : public virtual A
B::B(int xpos, int ypos) : A(xpos,ypos) {}
class C : public virtual A
C::C(int xpos, int ypos) : A(xpos,ypos) {}
Наконец, давайте создадим класс D, который наследует B и C.
class D : public B, public C
Если я пишу конструктор Ds следующим образом, я получаю ошибку компиляции, говорящую, что конструктор Ds должен явно вызывать конструктор As.
D::D(int xpos, int ypos) : B(xpos,ypos), C(xpos,ypos) {}
Почему это? Конечно, это проблематично, если я пытаюсь наследовать от классов, что я ничего не знаю о конструкторе классов? Разве мало того, что B и C оба явно вызывают конструктор As?