Appel d'une méthode virtuelle dans un constructeur
Bonsoir,
Je souhaiterais construire différents objets générants automatiquement des tableaux contenants des coordonnées de points (je simplifie).
Pour ce faire, j'ai créé une classe mère:
Code:
1 2 3 4 5 6 7 8
| class MainA
{
public:
MainA(int number_of_point); //constructeur
protected:
virtual void Generate(/* ...*/)=0; //fct virtuelle responsable de la génération des différents points
std::vector< std::pair<float, float> > array; //tableau de points
}; |
et des classes filles, dont en voici une pour l'exemple:
Code:
1 2 3 4 5 6 7 8 9
| class ExpA
{
public:
ExpA(int number_of_point): MainA(number_of_point) {;}
protected:
void Generate(/* ...*/) {
array.pushback(std::pair<float,float>(0.0f,3.14f);
//...
} |
dans laquelle je définis la fonction virtuelle générale.
Le problème c'est que j'appelle la fonction virtuelle Generate depuis le constructeur de la classe mère...
Code:
1 2 3
| MainA::MainA(int number_of_point) {
Generate(/* ... */);
} |
Pour moi ça ne pose pas de problème (bon je sais qu'il y en a un vu que ça crash ;))
La classe mère appelle sa fonction virtuelle au lieu d'appeller la fonction surchargée/définie de la classe fille:
Code:
ExpA a(10); //boom! Appel d'une fonction virtuelle
Il va de soi que je n'instancie jamais d'objet MainA vu qu'il s'agit d'une classe abstraite.
Je sais que la solution consiste à déplacer l'appel de la fonction Generate dans le constructeur de la classe fille (je suis fainénant ça m'énerve de devoir le réécrire à chaque fois)... mais bon je me demande quant même pourquoi il n'appelle pas la fonction surchargée ... (oui c'est parce qu'il est à l'intérieur de l'autre constructeur -> je trouve que ça ne fonctionne pas si bien que ça: on doit dupliquer plein de code).
Alors là, je me dis qu'une fonction de callback ça fonctionnerait qd même bien :yaisse2: mais bon niveau simplicité y'a mieux!
Bonne soirée!