Имеется следующий код:
class A {
private: int a;
public: A(int a) : a(a) {}
};
class B : public virtual A {
private: void* b;
public: B(int a) : A(a) { b = malloc(8); }
};
class C : public virtual A {
private: void* c;
public: C(int a) : A(a) { c = malloc(16); }
};
class D : public C {
private: void* d;
public: D(int a) : C(a) { d = malloc(32); }
};
В конструкторе класса D возникает ошибка следующего содержания: "для класса A не существует конструктор по умолчанию".
Если добавить в конструктор D вызов конструктора A, то ошибка исчезает, но напрашивается вопрос "Будет ли конструктор базового класса A вызываться два раза, ведь в конструкторе C тоже вызывается конструктор A?".
class D : public C {
private: void* d;
public: D(int a) : A(a), C(a) { d = malloc(32); }
};
Заранее спасибо за ответ.
P. S. Такая иерархия классов мне нужна, так как одни классы у меня наследуются от B или C по отдельности, а другие наследуют сразу оба класса. Класс D просто как пример одного из таких классов.