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:
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:
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...
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:
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
mais bon niveau simplicité y'a mieux!
Bonne soirée!
Partager