¿Es posible tener herencia virtual para la clase que no proporciona el constructor predeterminado?Constructor predeterminado y herencia virtual
El presente diagrama de diamantes (el más simple con el único cambio de ningún constructor predeterminado proporcionado) no compila (g ++ 4.4.3).
class A {
public:
A(int) {}
};
class B : virtual public A {
public:
B(int i) : A(i) {}
};
class C : virtual public A {
public:
C(int i) : A(i) {}
};
class D : public B, public C {
public:
D(int i) : B(i), C(i) {}
};
Gracias, Francesco
Dejando D conscientes de A es, por supuesto, deseable. La solución 'init()', desafortunadamente, tiene un inconveniente: el constructor de A será llamado dos veces (una por B y C) que puede tener efectos secundarios (especialmente si se usan miembros estáticos). Además, si un desarrollador crea una 'clase D: public A {}', el método 'init()' no se puede llamar en absoluto, dejando el objeto en un estado no inicializado. – Marste