Surcharge d'opérateur == - C++ - Programmation
Marsh Posté le 11-03-2009 à 11:03:55
operator== est symmétrique => fonction libre et non méthode
En suite le if return true/false est assez moche hein
return ( _x == point.x() ) && ( _y == point.y() )
ca suffit
Marsh Posté le 11-03-2009 à 11:07:16
Es-tu sur que les QList testent l'egalite des valeurs pointees et pas simplement des pointeurs?
Marsh Posté le 11-03-2009 à 11:09:34
Merci pour ta réponse.
Je ne comprend pas trop ce que tu veux dire par :
Citation : operator== est symmétrique => fonction libre et non méthode |
Marsh Posté le 11-03-2009 à 11:13:22
Un Programmeur a écrit : Es-tu sur que les QList testent l'egalite des valeurs pointees et pas simplement des pointeurs? |
Désolé j'avais pas vu le post entre temps.
Enfait j'en sais trop rien :
Citation : bool QList::contains ( const T & value ) const |
Je ne sais pas trop comment l'interpréter. Je vais essayer de regarder le code de la fonction contains.
Marsh Posté le 11-03-2009 à 11:17:04
C'est un peu hard pour moi, mais j'ai l'impression qu'il se base bien sur l'opérateur == des objets gérés :
Code :
|
Marsh Posté le 11-03-2009 à 11:20:02
Et comme tes objets sont des pointeurs... ce sont les pointeurs qui sont compares.
Marsh Posté le 11-03-2009 à 11:47:46
Un Programmeur a écrit : Et comme tes objets sont des pointeurs... ce sont les pointeurs qui sont compares. |
Je ne gère plus de pointeur dans ma QList et effectivement ça fonctionne !
Je n'étais pas obligé de gérer un pointeur, donc ça résoud mon problème. Mais dans le cas où je suis obligé de gérer des pointeurs, comment faire ? (c'est juste par curiosité).
Merci !
Marsh Posté le 12-03-2009 à 07:33:50
Joel F a écrit : operator== est symmétrique => fonction libre et non méthode |
Je me permet de reposer ma question sur t'as première phrase Joel F, j'ai pas compris ce que tu voulais dire.
Marsh Posté le 12-03-2009 à 11:21:13
Je veut dire que operator== n' a pas a etre une methode.
Code :
|
Marsh Posté le 12-03-2009 à 11:21:35
alexandre_j a écrit : |
Utiliser sd::list est-il envisageable ?
Marsh Posté le 12-03-2009 à 11:27:51
Joel F a écrit : |
Ca serait envisageable, mais je préfère utiliser un max d'objets Qt. J'en déduis qu'avec une std::list, je n'aurais pas eu ce soucis ?
Merci de ta réponse
Marsh Posté le 12-03-2009 à 11:43:06
alexandre_j a écrit : Ca serait envisageable, mais je préfère utiliser un max d'objets Qt. J'en déduis qu'avec une std::list, je n'aurais pas eu ce soucis ? |
Si (en fait, si tu penses que c'est un soucis, ca me fait penser qu'il y a peut-etre de la confusion de ta part entre pointeur et objet pointe). Mais comme nous connaissons mieux la lib standard que QT, on aurait pu te donner la solution (il y en a peut-etre une avec QT, je connais simplement pas du tout cette lib).
Marsh Posté le 12-03-2009 à 12:27:24
Il doit y avoir confusion alors
Finalement, j'en viens à me poser la question suivante : Quand est-ce qu'il est nécessaire d'avoir une liste de pointeur d'objet au lieu d'une liste d'objet ?
Je vois le cas lorsqu'on a un polymorphisme (class A abstraite, class B : A, class C : A) et qu'on doit stocker tout ces objets on a un std::list< A* > _obj;
Mais j'imagine que c'est pas le seul cas.
Ou peut-être que je suis à côté de la plaque
Marsh Posté le 12-03-2009 à 13:49:29
alexandre_j a écrit : Quand est-ce qu'il est nécessaire d'avoir une liste de pointeur d'objet au lieu d'une liste d'objet ? |
Quand est-ce que tu utilises un pointeur plutot qu'un objet?
Note: techniquement, le pointeur est un objet pour le C++. Il n'y a pas reellement de confusion ici, mais il faut parfois faire plus attention a la terminologie.
Citation : Je vois le cas lorsqu'on a un polymorphisme (class A abstraite, class B : A, class C : A) et qu'on doit stocker tout ces objets on a un std::list< A* > _obj; |
Quand tu dois faire de l'allocation dynamique, structure de donnee dynamique, necessite de controler la duree de vie, semantique de reference, ...
Marsh Posté le 11-03-2009 à 08:59:54
Bonjour,
J'ai une classe Action contenant des PointAction. Ces PointAction sont stockés dans une QList (objet Qt). Dans ma classe Action j'ai une fonction addPoint :
Elle permet d'ajouter un PointAction dans ma QList (en partant d'un QPoint et d'une couleur). J'utilise la fonction "contains" de la QList et dans la doc, il indique que mon objet stocké doit posséder la surcharge de l'opérateur == (là dessus, pas de problème). Dans ma QList, je ne dois pas avoir de points identique (au niveau des coordonnées, mais de la couleur).
Ma classe PointAction :
Seulement, le tout ne semble pas fonctionner. Il m'ajoute des points qui sont déjà contenu dans ma liste. Est-ce que je suis passé à côté de quelque chose ?
Sinon, est-ce que vous avez des remarques sur les bouts de code ? Des choses qu'il ne faut pas faire ou à éviter, etc. Je suis pas expert en cpp mais je suis interessé pour travailler le plus proprement possible.
Merci de m'avoir lu.