Pb de polymorphisme

cs_obby Messages postés 91 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 12 octobre 2006 - 20 mars 2006 à 22:35
cs_obby Messages postés 91 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 12 octobre 2006 - 21 mars 2006 à 23:28
Salut à tous,




j'ai un problème, en fait je fais du polymorphisme mais la classe
"mère" n'est pas la classe de plus haut niveau et du coup je n'arrive
pas à surcharger l'opérateur =, je passe forcement dans celui de la classe CFenetre (qui est une classe virtuel pure)




CFenetre : public Gtk::Widget


CFenetre2D : virtual public CFenetre, virtual public Gtk::Widget


CFenetre3D : virtual public CFenetre


Est-ce que quelqu'un connait la solution?

5 réponses

mathusale_ftl Messages postés 36 Date d'inscription vendredi 22 juillet 2005 Statut Membre Dernière intervention 18 août 2006
21 mars 2006 à 00:36
Salut,



Petit question : Pourquoi CFenetre2D hérite de Gtk::Widget, ce n'est pas nécessaire.

Bref, ce n'est qu'un détail.

Comme la classe CFenetre est une classe Abstraite, je pense que tu dois utiliser le mot clé virtual devant la méthode pour indiqué lors de l'éxécution que c'est cette méthode que tu souhaite utiliser.



Exemple :



Dans la classe de base : virtual void CFenetre::operator(const CFenetre &fenetre) 0;

Dans la classe dérivée:



virtual void CFenetre2D::operator =(const CFenetre2D &fenetre)

{

//Ton code

}



J'espère que ça peut t'aider
0
cs_obby Messages postés 91 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 12 octobre 2006
21 mars 2006 à 08:10
Le problème c'est que l'opérateur = des classes dérivé a un prototype qui est différent => c'est donc une méthode différente.... Je vais malgré tout essayer de voir en mettant l'opérateur = en virtuel pure
0
mathusale_ftl Messages postés 36 Date d'inscription vendredi 22 juillet 2005 Statut Membre Dernière intervention 18 août 2006
21 mars 2006 à 12:13
Mais normalement si tu met le mot clé virtual, il devrait exécuter la
méthode de la classe appelante. Le fait de le mettre en virual pure ne
changera rien je pense...



Sinon tu peux essayé ceci



virtual void operator=(....) override //surcharge de la méthode
0
cs_obby Messages postés 91 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 12 octobre 2006
21 mars 2006 à 23:28
on m'a fait part d'un article sur un autre forum, je vais regardé ca demain....

pour info :

http://c.developpez.com/faq/cpp/?page=classes#CLASS_clone
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_obby Messages postés 91 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 12 octobre 2006
21 mars 2006 à 23:28
on m'a fait part d'un article sur un autre forum, je vais regarder ca demain....

pour info :

http://c.developpez.com/faq/cpp/?page=classes#CLASS_clone
0
Rejoignez-nous