Problème d'analyse sur polymorphisme

vinc1008881 Messages postés 257 Date d'inscription dimanche 22 août 2004 Statut Membre Dernière intervention 29 septembre 2010 - 29 sept. 2010 à 19:17
shorzy Messages postés 94 Date d'inscription jeudi 23 novembre 2000 Statut Membre Dernière intervention 1 juin 2013 - 1 oct. 2010 à 20:48
Bonjour à tous,


Je me permets de solliciter votre expérience pour résoudre un petit problème qui me turlupine depuis qques jours... Je m'explique :

J'ai plusieurs classes A1, A2, ... qui hérite d'une meme classe mère A.

A1, A2 ont des méthodes qui leurs sont propres à chacune. Je voudrais faire :

A *maclasse_generique;

//.....

A = new A1; //différentiation.
A.methode_propre_a_A1();

Pour y arriver j'ai procèder comme suivant :

class A{
public :
virtual void methode_propre_a_A1(void){}
};

class A1 : public A{
void methode_propre_a_A1(void);
};

N'y a t-il pas une façon plus élégante d'avoir le meme résultat mais différement (classes abstraites ?/ transtypage ?). Je précise que pour le moment je ne peux pas faire une classe abstraite car méthodes dans les classes filles sont différentes.

Merci.

2 réponses

cptpingu Messages postés 3836 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 11 février 2023 124
30 sept. 2010 à 10:55
Il y a une petite erreur de conception dans ton raisonnement.

Si une méthode est propre à une classe fille, elle ne doit pas apparaître dans la classe mère, tout simplement.

Reprenons ton exemple:

class A {};
class A1 : public A
{
public:
  void methode();
};


La solution est simple, tu n'écris la méthode que dans A1. Ensuite, si tu veux l'utiliser tu peux faire ceci:

A* maclasse_generique = new A1;

// Tu ne peux pas faire: maclasse_generique.methode()
// en revanche, tu peux tout à fait faire:
A1* pa = static_cast(maclasse_generique);
pa->methode();


J'ai utilisé static_cast parce que j'étais sur du résultat, mais en cas de doute j'aurais pu aussi faire un dynamic_cast (plus lent mais peut dire si la conversion a échouée).

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
shorzy Messages postés 94 Date d'inscription jeudi 23 novembre 2000 Statut Membre Dernière intervention 1 juin 2013
1 oct. 2010 à 20:48
ca me semble correct !
0
Rejoignez-nous