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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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!