Polymorphisme : collection hétérogène sélective
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 :
Code:
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;
} |
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)...
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 :calim2: ), 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...)