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

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Problème de surcharge d'opérateur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Problème de surcharge d'opérateur

n°855392
burgergold
5$? va chez l'diable!
Posté le 22-09-2004 à 02:54:13  profilanswer
 

J'utilise des surcharges d'opérateurs pour déterminer si un point est plus petit, égal ou plus grand qu'un autre.
 
mais voila mon problème, ya un cas ou le point est plus petit et pourtant le bool retourner est true
 

DEBUT        (6,2)
FIN          (8,3)
s2.debut()   (8,4)
s2.fin()     (9,6)
intersection (7.33333,2.66667)


 
ma condition
 

Code :
  1. if (DEBUT <= intersection && FIN >= intersection
  2.       && s2.debut() <= intersection && s2.fin() >= intersection) {
  3.      return 1;
  4.   }


 
mes surcharges
 

Code :
  1. bool operator == (const Point & p1, const Point & p2) {
  2.   if (p1.abs() == p2.abs() && p1.ord() == p2.ord()) {
  3.     return 1;
  4.   }
  5.   return 0;
  6. }
  7. bool operator > (const Point & p1, const Point & p2) {
  8.   if (p1.abs() > p2.abs()
  9.       || (p1.abs() == p2.abs() && p1.ord() > p2.ord())) {
  10.      return 1;
  11.   }
  12.   return 0;
  13. }
  14. bool operator >= (const Point & p1, const Point & p2) {
  15.   if (p1 > p2 || p1 == p2) {
  16.     return 1;
  17.   }
  18.   return 0;
  19. }

mood
Publicité
Posté le 22-09-2004 à 02:54:13  profilanswer
 

n°855427
Lam's
Profil: bas.
Posté le 22-09-2004 à 09:24:54  profilanswer
 

2 trucs : utilises true et false plutôt que 0 et 1.
 
D'autre part, l'abscisse de ton intersection est inférieure à l'abscisse de s1.debut et s2.fin, le point n'est donc pas entre les deux, le test est donc négatif.  
 
Tu essayes de calculer l'intersection de 2 droites ou de 2 segments ?

n°855609
burgergold
5$? va chez l'diable!
Posté le 22-09-2004 à 13:43:35  profilanswer
 

entre 2 segments
 
je sais que l'abscisse de l'intersection est plus petite que s1.debut, c'est justement le test qui foire :D

n°855623
burgergold
5$? va chez l'diable!
Posté le 22-09-2004 à 13:58:36  profilanswer
 

merde maintenant ca fonctionne :/

n°855739
burgergold
5$? va chez l'diable!
Posté le 22-09-2004 à 16:16:57  profilanswer
 

ca fait 1hrs30 que je bosse pour finalement me rentre compte que c'est l'un des 2 binaire du prof qui est buggé :D
 
pour un fichier de 100 segments, son binaire 1 trouvait 899 intersection (comme moi) alors que son binaire 2 en trouvait 325
 
et comme un con moi depuis le début je comparais mes résultats avec son 2e binaire :D
 
lui est envoyé un mail :o

n°855874
jesus_chri​st
votre nouveau dieu
Posté le 22-09-2004 à 19:15:27  profilanswer
 

Lam's a écrit :

2 trucs : utilises true et false plutôt que 0 et 1.


Bon conseil, bien que le compilo fasse la conversion automatiquement.
 
Accessoirement, sachez que si false vaut toujours 0, true ne vaut pas toujours 1 en C/C++.
false ça vaut (!0). Sous MSVC et GCC ça fait 1, mais sous certains compilos ça peut être -1

n°855969
Joel F
Real men use unique_ptr
Posté le 22-09-2004 à 21:11:03  profilanswer
 

jesus_christ a écrit :

Bon conseil, bien que le compilo fasse la conversion automatiquement.


 
non [:le kneu]

n°855977
jesus_chri​st
votre nouveau dieu
Posté le 22-09-2004 à 21:15:00  profilanswer
 

et pourquoi ?
Une fonction bool doit retourner un bool, pas un entier. Dans ce cas, il y a conversion implicite en bool. Et true ne vaut pas toujours 1, pas contre 1 ça vaut toujours true.

n°855978
Joel F
Real men use unique_ptr
Posté le 22-09-2004 à 21:15:55  profilanswer
 

ben non pas toujours, et la conversion automatique n'est pas garanti.

n°855979
cris56
Posté le 22-09-2004 à 21:16:18  profilanswer
 

Citation :

By definition, true has the value 1 when converted to an integer and false has the value 0. Conversely,
integers can be implicitly converted to bool values: nonzero integers convert to true and 0
converts to false.

mood
Publicité
Posté le 22-09-2004 à 21:16:18  profilanswer
 

n°855980
Joel F
Real men use unique_ptr
Posté le 22-09-2004 à 21:17:32  profilanswer
 

cris56 a écrit :

Citation :

By definition, true has the value 1 when converted to an integer and false has the value 0. Conversely,
integers can be implicitly converted to bool values: nonzero integers convert to true and 0
converts to false.




 
Norme C ?
bon ben je me mets à jour , je me rappelles des pbs assez chiants sur gcc 2.95.2 voire le 3.0

n°855984
cris56
Posté le 22-09-2004 à 21:19:41  profilanswer
 

stroustrup 3e edition, mais ya un "can be" ?

n°855988
Lam's
Profil: bas.
Posté le 22-09-2004 à 21:29:43  profilanswer
 

cris56 a écrit :

stroustrup 3e edition, mais ya un "can be" ?


Nan, mais il utilise bien le mot "converted". Et les compilateurs, ils n'aiment pas convertir de façon implicite.
 
Donc, le code suivant générera 2 warnings (selon les compilos):

Code :
  1. double d = 1.0;
  2. int i = d;
  3. bool b = i;


 
Alors que celui-là n'en fera aucun:

Code :
  1. int i = 1;
  2. bool b = !!i;


Message édité par Lam's le 22-09-2004 à 21:30:42

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] Problème de surcharge d'opérateur

 

Sujets relatifs
[sql pgpmyadmin] probleme de connection a la baseProbleme IE et formulaire bien rempli
Probleme avec submit et HTML Rich Text Editingproblème pour changer de place un fichier log sous SQL server 2000 ...
Probleme menu sur mon siteProblème avec une iframe
Problème gtk+Problème de requete
Problème navigator.plugins et Win XP SP2Probleme d'affichage des accents PHP/XML
Plus de sujets relatifs à : [C++] Problème de surcharge d'opérateur


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR