Propagation du mot clef virtual
Bonjour,
Le titre peut faire penser à la discussion juste au-dessus, mais pas tout à fait.
Je me demandais si l'héritage d'une classe de base était bel et bien sensé devenir virtuel après le premier héritage virtuel... Un exemple sera plus rapide :
Voilà ce qui ne marchait pas :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
classe Base {
}
;
class Interface{
};
class Derived : virtual public Base, public Interface {
};
int main() {
Derived d;
Interface * i = &d //error : cannot convert from Derided* to Interface *
} |
Code qui marche :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
classe Base {
}
;
class Interface{
};
class Derived : public Interface, virtual public Base {
};
int main() {
Derived d();
Interface * i = &d // Marche parfaitement
} |
Du coup, je me demandais où se plaçait la restriction. La norme ? La technique ? Le compilateur ? Merci d'avance de satisfaire ma curiosité !