tres simple (surdef doperateur)

tres simple (surdef doperateur) - C++ - Programmation

Marsh Posté le 09-07-2003 à 18:14:36    

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
Reply

Marsh Posté le 09-07-2003 à 18:14:36   

Reply

Marsh Posté le 09-07-2003 à 18:21:37    

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+=

Reply

Marsh Posté le 09-07-2003 à 18:31:08    

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& );

Reply

Marsh Posté le 09-07-2003 à 18:34:20    

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
Reply

Marsh Posté le 09-07-2003 à 18:53:59    

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
Reply

Marsh Posté le 09-07-2003 à 19:16:13    

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
Reply

Marsh Posté le 09-07-2003 à 20:13:25    

++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 ???
 

Reply

Marsh Posté le 09-07-2003 à 20:19:15    

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.
Reply

Marsh Posté le 09-07-2003 à 20:22:34    

essayes
 

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

Reply

Marsh Posté le 09-07-2003 à 20:25:00    

++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.
Reply

Marsh Posté le 09-07-2003 à 20:25:00   

Reply

Marsh Posté le 09-07-2003 à 21:31:01    

++Taz a écrit :

essayes
 

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




 
 :heink:

Reply

Marsh Posté le 10-07-2003 à 08:07:27    

++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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed