Bonjour à tous,
sur vos conseils, je suis parti sur l'implémentation d'un ensemble de classes en utilisant le Template Method. Ca donne à peu près ceci:
Cela fonctionait très bien. Mais voilà qu'aujourd'hui, je dois apporter une modification. En effet, la classe Fille2 va maintenant devoir gérer des données propres à elle que Fille1 n'aura pas. Prenons un tableau de int pour l'exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 class Mere { [...] void MethodImpl(); virtual void MethodDerivate() = 0; }; class Fille1 : public Mere { void MethodDerivate(){<mon code ici>} }; class Fille2 : public Mere { void MethodDerivate(){<mon code (différent) ici>} };
Jusque là, tout va bien. Je voudrais maintenant une méthode qui modifie ce tableau, qui le vide par exemple. Donc j'ai fait cela:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 class Fille2 : public Mere { void MethodDerivate(){<mon code (différent) ici>} vector<int> m_array; };
Jusqu'ici tout va bien. Le problème c'est que maintenant, je voudrais appeler ClearArray depuis une méthode implémentée dans la classe Mere, ce qui nous donnerais quelque chose comme cela:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 class Mere { [...] void MethodImpl(); virtual void MethodDerivate() = 0; virtual void ClearArray() = 0; }; class Fille1 : public Mere { void MethodDerivate(){<mon code ici>} void ClearArray(){m_array.clear();} vector<int> m_array; }; class Fille2 : public Mere { void MethodDerivate(){<mon code (différent) ici>} void ClearArray(){} };
Mais là, ça ne fonctionne pas. Ca plante à l'exécution:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 class Mere { [...] void MethodImpl(ClearArray()); //modif ici virtual void MethodDerivate() = 0; virtual void ClearArray() = 0; }; class Fille1 : public Mere { void MethodDerivate(){<mon code ici>} void ClearArray(){m_array.clear();} vector<int> m_array; }; class Fille2 : public Mere { void MethodDerivate(){<mon code (différent) ici>} void ClearArray(){} };J'espère avoir été clair, et si vous m'avez suivi, je serais bien aise de recevoir vos conseils avisésR6025: pure virtual call.
merci.
Partager