Je comprends un peu mieux ce que tu veux faire... Ce n’est pas possible, car quand tu es dans le constructeur de polygone, le vtable (pointeur vers la table des fonctions virtuelles) est initialisé pour Polygone. Ce n’est qu’à la fin du constructeur de Polygone où le runtime modifie la vtable puis appelle le constructeur de Triangle.
Dans ce cas simple, la solution est de descendre l’information nb_de_point en paramètre au constructeur de Polygone.
classTriangle:publicPolygon{public:Triangle():Polygon(3){}intget_nb_points()const{return3;}// pourrait être plus compliqué, lire dans un fichier, etc. };
Mais sinon, une méthode statique de construction de l’objet peut-être intéressante.
Pour comprendre l’ordre d’exécution, la vtable... tu peux ajouter des traces (un bête std::cout) et dump(this,sizeof(*this)) dans chaque constructeur. Ça devrait te donner une idée.
[^] # Re: Ordre des constructeurs
Posté par Anthony Jaguenaud . En réponse au message Le constructeur d'une classe de base peut-il savoir qu'il n'est pas le dernier?. Évalué à 3.
Je comprends un peu mieux ce que tu veux faire... Ce n’est pas possible, car quand tu es dans le constructeur de polygone, le vtable (pointeur vers la table des fonctions virtuelles) est initialisé pour Polygone. Ce n’est qu’à la fin du constructeur de Polygone où le runtime modifie la vtable puis appelle le constructeur de Triangle.
Dans ce cas simple, la solution est de descendre l’information nb_de_point en paramètre au constructeur de Polygone.
Mais sinon, une méthode statique de construction de l’objet peut-être intéressante.
Pour comprendre l’ordre d’exécution, la vtable... tu peux ajouter des traces (un bête std::cout) et dump(this,sizeof(*this)) dans chaque constructeur. Ça devrait te donner une idée.