Bonjour,
A partir d'une classe mère, je me constitue une collection hétérogène d'instances filles, et souhaite la parcourir de manière sélective, ç-à-d en n'appelant la fonction polymorphique que d'une seule d'entre elles.
En partant de l'exemple simple ci-dessous :
je parcours dans ce cas Fille1 et Fille2 en appelant la fonction polymorphique ValeurResultante() (et j'obtiens 19), mais je souhaiterais ne parcourir que Fille1 (pour obtenir 7)...
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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 #include <iostream> #include <vector> using namespace std; class Mere { protected: int valeurA; int valeurB; public: Mere(int const& a, int const& b) : valeurA(a), valeurB(b) {} ~Mere(){} virtual double ValeurResultante(void) = 0; }; class Fille1 : public Mere { public: Fille1(int const& a, int const& b) : Mere(a, b) {} ~Fille1(){} double ValeurResultante(void){return valeurA + valeurB;}; // addition }; class Fille2 : public Mere { public: Fille2(int const& a, int const& b) : Mere(a, b) {} ~Fille2(){} double ValeurResultante(void){return valeurA * valeurB;}; // multiplication }; int main(void) { vector<Mere *>collectionHeterogene; collectionHeterogene.push_back(new Fille1(3,4)); collectionHeterogene.push_back(new Fille2(3,4)); double sommeValeurResultante(0); for (size_t i(0); i < collectionHeterogene.size(); ++i) sommeValeurResultante += collectionHeterogene[i]->ValeurResultante(); cout << "Somme des valeurs resultantes = " << sommeValeurResultante << endl; return 0; }
En fouillant un peu, j'ai entendu parler de dynamic_cast ou double dispatch (visitor pattern); est-ce que ce sont de bonnes pistes ? si oui, comment les utiliser concrètement ? (parce que je n'y arrive pas ), sinon qu'est-il possible d'envisager (en maintenant 1 collection hétérogène) ?
Merci et bonne fin de week-end (pour ceux qui sont en congé ce lundi de Pentecôte...)
Partager