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

  FORUM HardWare.fr
  Programmation
  C++

  tres simple (surdef doperateur)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

tres simple (surdef doperateur)

n°452508
red factio​n
Posté le 09-07-2003 à 18:14:36  profilanswer
 

Code :
  1. #include <iostream.h>
  2. class Complex{
  3. int reel;
  4. int imaginary;
  5. public:
  6. Complex();
  7. Complex(int);
  8. Complex(int,int);
  9. friend ostream& operator << (ostream&, Complex& );
  10. Complex operator +(const Complex& );
  11. };
  12. ostream& operator << (ostream& out, Complex& c){
  13. out << c.reel << "   " << c.imaginary;
  14. return out;
  15. }
  16. Complex Complex::operator+(const Complex& c){
  17. Complex r;
  18. r.reel=this->reel+c.reel;
  19. r.imaginary=this->imaginary+c.imaginary;
  20. return r;
  21. }
  22. Complex::Complex(){
  23. reel=0;
  24. imaginary=0;
  25. }
  26. Complex::Complex(int val){
  27. reel=val;
  28. imaginary=val;
  29. }
  30. Complex::Complex(int r,int i){
  31. reel=r;
  32. imaginary=i;
  33. }
  34. void main(){
  35. Complex c1(5,4);
  36. Complex c2(7,9);
  37. Complex c3;
  38. c3=c1+c2+c2;
  39. c3=c3+5;
  40. c3=5+c3; //marche pas !!!
  41. cout <<  c3;
  42. }


 
voila j'ai pense a faire
friend Complex operator+(int,Complex& )
 
mais bon ya peut etre plus propre comme code.
 
dans ce cas pourquoi ne pas mettre  
friend Complex operator+(Complex&,int) aussi a la place de  
Complex(int) ????


Message édité par red faction le 09-07-2003 à 18:18:34
mood
Publicité
Posté le 09-07-2003 à 18:14:36  profilanswer
 

n°452514
Taz
bisounours-codeur
Posté le 09-07-2003 à 18:21:37  profilanswer
 

normal, il faut que pour operator+, this soit const. et il manque plein de const partout d'ailleurs
 
en regle général, on evite de surcharger de la maniere que tu as suivi: je m'explique: on surcharge la fonction membre operator+= et apres on surcharge operator+ globalement (ni friend ni rien) en utilisant operator+=

n°452524
red factio​n
Posté le 09-07-2003 à 18:31:08  profilanswer
 

Code :
  1. void Complex::operator +=(const Complex& c){
  2. this->reel+=+c.reel;
  3. this->imaginary+=c.imaginary;
  4. }


 
voila pour operator +=
 
pour operator + je vois pas trop  
 
et pour les const jen ai rajoute pour ostream dans la surdef de << pour les autres je vois pas trop
 
friend ostream& operator << (ostream&,const Complex& );

n°452526
Taz
bisounours-codeur
Posté le 09-07-2003 à 18:34:20  profilanswer
 

Code :
  1. Complex operator+(const Complex &a, const Complex &b)
  2. {
  3.   Complex tmp(a);
  4.   tmp+=b;
  5.   return tmp;
  6. }

et voilou!
 
 
edit: tu ferais bien d'utiliser des double à la palce d'int et peut etre aussi un unique constructeur avec des paramètre par défaut


Message édité par Taz le 09-07-2003 à 18:35:29
n°452560
red factio​n
Posté le 09-07-2003 à 18:53:59  profilanswer
 

merci bien pour toutes ces reponses  :D  
 

Code :
  1. #include <iostream.h>
  2. class Complex{
  3. double real;
  4. double imaginary;
  5. public:
  6. Complex();
  7. Complex(double,double);
  8. friend ostream& operator << (ostream&,const Complex& );
  9. void operator +=(const Complex& );
  10. friend Complex operator +(const Complex&,const Complex& );
  11. };
  12. void Complex::operator +=(const Complex& c){
  13. this->real+=+c.real;
  14. this->imaginary+=c.imaginary;
  15. }
  16. Complex operator+(const Complex &a, const Complex &b){
  17.     Complex tmp(a);
  18.     tmp+=b;
  19.     return tmp;
  20. }
  21. ostream& operator << (ostream& out,const Complex& c){
  22. out << c.real << "   " << c.imaginary;
  23. return out;
  24. }
  25. Complex::Complex(){
  26. real=0.0;
  27. imaginary=0.0;
  28. }
  29. Complex::Complex(double r=0.0,double i=0.0){
  30. real=r;
  31. imaginary=i;
  32. }
  33. void main(){
  34. Complex c1(5,4);
  35. Complex c2(7,9);
  36. Complex c3;
  37. c3=c1+c2+c2;
  38. c3=c3+5;
  39. c3=5+c3;
  40. cout <<  c3;
  41. }


 
jarrive pas a virer le Complex::Complex sinon il bloque sur la construction de c3 -> Complex c3;
et si je le laisse comme ca il me fait 'Complex::Complex' : ambiguous call to overloaded function
 
 :(  
sinon c mieux de surdef += meme si on lutilise pas , c un principe c ca ???


Message édité par red faction le 09-07-2003 à 18:54:34
n°452570
Taz
bisounours-codeur
Posté le 09-07-2003 à 19:16:13  profilanswer
 

ut me lsi des fois? tu connais le copier/coller    [:tomtom75]
 
les valeurs par défaut tu connais? et vire moi ces int.


Message édité par Taz le 09-07-2003 à 19:18:22
n°452604
red factio​n
Posté le 09-07-2003 à 20:13:25  profilanswer
 

++Taz a écrit :

ut me lsi des fois? tu connais le copier/coller    [:tomtom75]
 
les valeurs par défaut tu connais? et vire moi ces int.


 
 
ouais mais bon pas suffisament aparament c pour ca que je demande de l'aide....
 
si je savait tout faire tout seul comme un grand jviendrai pas ici  :non:  
 
 

Code :
  1. Complex::Complex(){
  2. }
  3. Complex::Complex(double r,double i=0.0){
  4. real=r;
  5. imaginary=i;
  6. }


 
ca ca marche... mais bon ya ptet moyen de faire un seul constructeur ???  
 
Complex::Complex(double r,double i=r)
 
on peut pas faire, ya moyen de resoudre le probleme autrement ???
 

n°452617
totalnewby
Posté le 09-07-2003 à 20:19:15  profilanswer
 

et avec ca maintenant tu arrives a faire  
[cpp]
Complex C(3,4);
Complex D = C+14; ????


---------------
Tellement noob que je sais pas comment je suis arrivé ici.
n°452621
Taz
bisounours-codeur
Posté le 09-07-2003 à 20:22:34  profilanswer
 

essayes
 

Code :
  1. Complex(double r=0.0, double i=0.0)
  2. : rpart(r),
  3.    ipart(i)
  4. {}

n°452624
totalnewby
Posté le 09-07-2003 à 20:25:00  profilanswer
 

++Taz a écrit :

essayes
 

Code :
  1. Complex(double r=0.0, double i=0.0)
  2. : rpart(r),
  3.    ipart(i)
  4. {}




je pense que si il va avec ca au cours , on va lui dire qu'il n'est pas sencé savoir :D


---------------
Tellement noob que je sais pas comment je suis arrivé ici.
mood
Publicité
Posté le 09-07-2003 à 20:25:00  profilanswer
 

n°452807
red factio​n
Posté le 09-07-2003 à 21:31:01  profilanswer
 

++Taz a écrit :

essayes
 

Code :
  1. Complex(double r=0.0, double i=0.0)
  2. : rpart(r),
  3.    ipart(i)
  4. {}




 
 :heink:

n°453212
MorFinBaZ
Posté le 10-07-2003 à 08:07:27  profilanswer
 

++Taz a écrit :

normal, il faut que pour operator+, this soit const. et il manque plein de const partout d'ailleurs
 
en regle général, on evite de surcharger de la maniere que tu as suivi: je m'explique: on surcharge la fonction membre operator+= et apres on surcharge operator+ globalement (ni friend ni rien) en utilisant operator+=

Hum la je dis pas bete =) C'est tout simple et tout propre.


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

  tres simple (surdef doperateur)

 

Sujets relatifs
[php:resolu] compteur trés simple sur un exe, comment faire?[SQL] Surement simple : comment récupérer le nombre le plus elevé ?
Mysql : Sélection intelligente dans de très grosses bases [résolu]projet c++ simple traduire une phrase en morse "sonore"
[texture][opengl] inserer une simple image en 2DJAVA3D - Question trés pointu sur caméra en java3d
Un portail simple en php.[C/C++] SNMP Manager tout simple ... quelques conseils SVP
[blabla@olympe] Le topic du modo, dieu de la fibre et du monde 
Plus de sujets relatifs à : tres simple (surdef doperateur)


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