Problème surcharge operator= C++
Fermé
cyberlulu
Messages postés
62
Date d'inscription
dimanche 10 novembre 2002
Statut
Membre
Dernière intervention
26 juin 2008
-
26 juin 2008 à 11:36
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 26 juin 2008 à 14:07
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 26 juin 2008 à 14:07
A voir également:
- Problème surcharge operator= C++
- Surcharge lnb - Forum TNT / Satellite / Réception
- Court circuit et surcharge LNB - Forum TNT / Satellite / Réception
- Surcharge au niveau du cable antenne - Forum TV & Vidéo
- Surcharge du circuit LNB - Forum TNT / Satellite / Réception
- Comment acceder a un site surchargé ✓ - Forum Logiciels
2 réponses
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
26 juin 2008 à 12:21
26 juin 2008 à 12:21
8-/
objet1 est de type A, comment veux tu qu'il aille chercher un membre de la classe B ??
Ce que tu demande est tout simplement impossible, comment le compilateur peux deviner ?
Tu peux faire un typage sauvage :
*(B*)objet1=*objet2;
là, il devrais appeler la méthode B::opertor=(A).
As tu bien défini operator= virtuel ?
si oui, essai objet1->operator=(*objet2);
objet1 est de type A, comment veux tu qu'il aille chercher un membre de la classe B ??
Ce que tu demande est tout simplement impossible, comment le compilateur peux deviner ?
Tu peux faire un typage sauvage :
*(B*)objet1=*objet2;
là, il devrais appeler la méthode B::opertor=(A).
As tu bien défini operator= virtuel ?
si oui, essai objet1->operator=(*objet2);
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
26 juin 2008 à 14:07
26 juin 2008 à 14:07
Non, objet1 est de type A* !
A*objet1=new B;
veux dire que tu déclare une variable de nom "objet1" qui est un pointeur sur une classe de type A !
Et ensuite, tu fait pointé objet1 sur une classe de type B (new B).
donc, *objet1 est vu par le compilateur comme étant de type A et non de type B.
Ensuite, par dessus, il y a le polymorphisme qui viens se greffer dessus. Lorsque tu as un pointeur de classe et que tu appel une méthode, si celle ci est virtuelle, il regarde dans la v-table quelle fonction utiliser.
D'un autre coté, tu fait *obj1=*obj2. Mettons qu'il comprenne le polymorphisme dans ce cas là (à vérifier, pour moi le compilo voi : A.operator=(A)) il va alors chercher à trouver la méthode B::operator=(A); si celle-ci n'est pas défini il va chercher dans la classe mère, à savoir A, A::operator=(A), qu'il va trouver.
D'un autre coté, comme tu ne mets pas le code source, je ne fait que des hypothèses.
Met au moins la déclaration des classes.
D'un autre coté, je ne comprends pas pourquoi tu met du B dans du A. autant mettre du B dans du B. La démarche se comprends si tu fait :
A** objet=new A*[N];
objet[0]=new B;
objet[1]=new A;
c'est à dire si tu utilise le polymorphisme.
A*objet1=new B;
veux dire que tu déclare une variable de nom "objet1" qui est un pointeur sur une classe de type A !
Et ensuite, tu fait pointé objet1 sur une classe de type B (new B).
donc, *objet1 est vu par le compilateur comme étant de type A et non de type B.
Ensuite, par dessus, il y a le polymorphisme qui viens se greffer dessus. Lorsque tu as un pointeur de classe et que tu appel une méthode, si celle ci est virtuelle, il regarde dans la v-table quelle fonction utiliser.
D'un autre coté, tu fait *obj1=*obj2. Mettons qu'il comprenne le polymorphisme dans ce cas là (à vérifier, pour moi le compilo voi : A.operator=(A)) il va alors chercher à trouver la méthode B::operator=(A); si celle-ci n'est pas défini il va chercher dans la classe mère, à savoir A, A::operator=(A), qu'il va trouver.
D'un autre coté, comme tu ne mets pas le code source, je ne fait que des hypothèses.
Met au moins la déclaration des classes.
D'un autre coté, je ne comprends pas pourquoi tu met du B dans du A. autant mettre du B dans du B. La démarche se comprends si tu fait :
A** objet=new A*[N];
objet[0]=new B;
objet[1]=new A;
c'est à dire si tu utilise le polymorphisme.
26 juin 2008 à 13:53
et sinon la méthode operator= est bien en virtuelle. J'ai d'ailleurs fait le test avec une autre méthode et ca fonctionne sans problème, mais pas pour l'operator=.
donc si qqun a une idée...