Est-il possible d'avoir un héritage virtuel pour la classe ne fournissant pas le constructeur par défaut?Constructeur par défaut et héritage virtuel
Le présent diagramme en diamant (le plus simple avec le seul changement de constructeur par défaut non fourni) ne compile pas (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) {}
};
Merci, Francesco
Laissant D ignorer A est, bien sûr, souhaitable. La solution 'init()' a malheureusement un inconvénient: le constructeur de A sera appelé deux fois (une fois par B et C) ce qui peut avoir des effets secondaires (surtout si des membres statiques sont utilisés). De plus, si un développeur crée une classe D: public A {} ', la méthode 'init()' peut ne pas être appelée du tout, laissant l'objet dans un état non initialisé. – Marste