Problème d'analyse sur polymorphisme

Signaler
Messages postés
257
Date d'inscription
dimanche 22 août 2004
Statut
Membre
Dernière intervention
29 septembre 2010
-
Messages postés
94
Date d'inscription
jeudi 23 novembre 2000
Statut
Membre
Dernière intervention
1 juin 2013
-
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

Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
124
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
Messages postés
94
Date d'inscription
jeudi 23 novembre 2000
Statut
Membre
Dernière intervention
1 juin 2013

ca me semble correct !