Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
4468 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

Ou placer un virtual operator== ?

n°713647
xterminhat​e
Si vis pacem, para bellum.
Posté le 01-05-2004 à 18:08:57  profilanswer
 

Reprise du message précédent :


 
Pourquoi pas ?


---------------
Cordialement, Xterm-in'Hate...
mood
Publicité
Posté le 01-05-2004 à 18:08:57  profilanswer
 

n°713650
Taz
bisounours-codeur
Posté le 01-05-2004 à 18:13:22  profilanswer
 

xterminhate a écrit :

Pourquoi pas ?

t'as pas l'impression de faire la même chose que typeid et en plus de mal l'utiliser ?

n°713653
xterminhat​e
Si vis pacem, para bellum.
Posté le 01-05-2004 à 18:17:46  profilanswer
 

C'est pas une impression, mais je ne vois pas en quoi cela doit être proscrit. Toutes ces insultes pour dire ca au final. On perd notre temps :)


---------------
Cordialement, Xterm-in'Hate...
n°713655
Taz
bisounours-codeur
Posté le 01-05-2004 à 18:20:31  profilanswer
 

xterminhate a écrit :

C'est pas une impression, mais je ne vois pas en quoi cela doit être proscrit. Toutes ces insultes pour dire ca au final. On perd notre temps :)

... ben écoute si c'est comme ça que tu prends les conseils ... tu ne sais même pas ce qu'est typeid, tu ne sais même pas comment l'utiliser, tu ne connais pas dynamic_cast ... c'est toi qui voit ...

n°713656
Slayne
Yaouchhh
Posté le 01-05-2004 à 18:20:55  profilanswer
 

Taz a écrit :

non. à partir du moment ou les types diffèrent, il faut lancer une erreur. donc  
 
si même type
  - comparer
sinon
  - lancer exception
 
 
je comprends pas vos histoires, si Cercle décide que operator==(Cercle, Cercle) reposent sur operator==(Forme, Forme) il doit pouvour le faire, et si carré décide que son operator)== n'a besoin de rien d'autre, il faut le laisser faire aussi


 
Si justement, je veux pouvoir comparer 2 Formes différentes.
Si je fais une liste contenant des formes, aussi bien des cercle que des carrés, je serai contraint à un moment de comparer 2 formes différentes.
 
Par exemple, ma liste de formes aurait une méthode ajouterForme(const Cercle& ), ajouterForme(const Carre & ). Mais quand je voudrais supprimer un élément, je ferai appelle à supprimerForme(const Cercle & ) qui devra comparer chaque élément de ma liste à celui passer en paramètre, jusqu'à que le bon soit trouver.
 
Pour le ==, celui de Carré n'est pas forcé d'appeller celui de forme, mais bon dans mon exemple c'est ce que je veux.

n°713661
Taz
bisounours-codeur
Posté le 01-05-2004 à 18:24:14  profilanswer
 

ajouterForme(const Cercle& ), ajouterForme(const Carre & ). .... super t'as vraiment tout compris ...
 
 
bon on va être clair : tu veux faire quoi au final ?

n°713662
R3g
fonctionnaire certifié ITIL
Posté le 01-05-2004 à 18:34:37  profilanswer
 

je me mèle de ce qui me regarde pas, mais dans une liste de Formes, il me semble que la methode ajouterForme devrait prendre une Forme en paramètre, ça serait pas plus logique ?


---------------
Au royaume des sourds, les borgnes sont sourds.
n°713663
Taz
bisounours-codeur
Posté le 01-05-2004 à 18:34:59  profilanswer
 

oui

n°713664
Slayne
Yaouchhh
Posté le 01-05-2004 à 18:38:54  profilanswer
 

R3g a écrit :

je me mèle de ce qui me regarde pas, mais dans une liste de Formes, il me semble que la methode ajouterForme devrait prendre une Forme en paramètre, ça serait pas plus logique ?


 
Oui effectivement, ca serait plus logique et ca fait une seule methode :)
 
Au final : Bah je veux simplement faire une liste de Formes, c'est tout !
Et pour ça, je dois pouvoir les comparer entre elles :/

n°713666
Enidan
Posté le 01-05-2004 à 18:44:30  profilanswer
 

Slayne a écrit :


Code :
  1. bool operator==(const Forme &f){
  2.   if (typeid(*this) == typeid(f))
  3.   {
  4.     return this->Forme::operator==(f) && this->rayon == f.rayon;
  5.   }
  6. return false;
  7. }


 
Ca ferait ce que je veux, sans duplication, mais ca a le defaut de transformer mon operator== en methode de classe.
Si tu trouves que c'est moche, dis le moi  :D


 
Pas essayé mais en modifiant ton code pout utiliser un dynamic_cast plutôt que typeid ? Du style :

Code :
  1. bool operator==(const Forme &f)
  2. {
  3.   Cercle * ptr = dynamic_cast<Cercle *>(&f);
  4.   if (ptr == 0)
  5.   {
  6.      // Echec, f n'est pas un cercle
  7.      return false;
  8.   }
  9.   else
  10.   {
  11.      return (this->Forme::operator==(*ptr)) && (this->rayon == ptr->rayon);
  12.   }
  13. }


Message édité par Enidan le 01-05-2004 à 19:05:00
mood
Publicité
Posté le 01-05-2004 à 18:44:30  profilanswer
 

n°713670
Slayne
Yaouchhh
Posté le 01-05-2004 à 18:49:17  profilanswer
 

enidan a écrit :

Pas essayé mais en modifiant ton code pout utiliser un dynamic_cast plutôt que typeid ? Du style :


 
Ok mais ... c'était quoi les défaut des typeid par rapport à cette méthode ?  :??:

n°713672
skelter
Posté le 01-05-2004 à 18:52:23  profilanswer
 

ou catch std::bad_cast

n°713674
Enidan
Posté le 01-05-2004 à 19:02:45  profilanswer
 

Slayne a écrit :

Ok mais ... c'était quoi les défaut des typeid par rapport à cette méthode ?  :??:


Je ne pense pas que le typeid lui-même pose problème (mais je ne suis pas une bête du C++)
Par-contre, il te faudra bien caster f pour l'utiliser en tant que Cercle et utiliser l'attribut rayon.
C'est pour ça que ma solution me semble plus claire.
 
Je viens d'éditer car j'avais écrit "f.rayon" et que ça marche pas ;)


Message édité par Enidan le 01-05-2004 à 19:06:17
n°713676
Slayne
Yaouchhh
Posté le 01-05-2004 à 19:09:18  profilanswer
 

enidan a écrit :

Je ne pense pas que le typeid lui-même pose problème (mais je ne suis pas une bête du C++)
Par-contre, il te faudra bien caster f pour l'utiliser en tant que Cercle et utiliser l'attribut rayon.
C'est pour ça que ma solution me semble plus claire.
 
Je viens d'éditer car j'avais écrit "f.rayon" et que ça marche pas ;)


 
Effectivement, c'est une bonne raison, merci bien :)

n°713677
Taz
bisounours-codeur
Posté le 01-05-2004 à 19:09:52  profilanswer
 


 
manque des const dans tous les sens ... et tu as une reference pourquoi repasser avec un pointeur ?
 
 
j'ai toujours pas compris le problème ... tu veux pas expliquer ce que tu veux faire vraiment ? parce que là j'ai l'impression que t'as décidé que operator== était la solution à tous tes problèmes alors que je pense que non

n°713678
Enidan
Posté le 01-05-2004 à 19:15:17  profilanswer
 

Taz a écrit :

manque des const dans tous les sens ... et tu as une reference pourquoi repasser avec un pointeur ?


OK pour les const
Par-contre, pour le pointeur, c parce que je crois que dynamic_cast lève une exception pour les références.
Comme là, c'est un cas prévu, ça me paraît pas propre de le traiter en catchant l'exception


Message édité par Enidan le 01-05-2004 à 19:15:45
n°713680
Taz
bisounours-codeur
Posté le 01-05-2004 à 19:23:30  profilanswer
 

ben c'est une histoire de LBYL vs. EAFP
 
si t'es frileux, tu fais un la conversion avec un test, sinon, tu veux gagner du temps, tu fais et si ça gueule tu attrape l'exception et tu la traites


Message édité par Taz le 01-05-2004 à 19:27:46
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
Placer image dans le coin[CSS] placer une image en haut a droite d'un cadre avec IE...
[C] Placer un délai dans l'éxecution d'un programmeplacer une boite de dialogue
visual c++ placer des controles sur une formproblème avec 'operator type();' : ambiguité
Overlord operator <<, aide svpSurcharge d operateur = et virtual , ca va ensemble ?
manière la plus rapide de placer un bit[PHP-objet] Dans quelle classe placer cette methode ?
Plus de sujets relatifs à : Ou placer un virtual operator== ?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)