Bonjour,
j'ai fait une classe complex, mais il semble qu'il y ait un probleme avec mes operateurs.. Je ne vois pas ce qui ne va pas..
Voici mon code:
Qu'en pensez-vous?Code:#include <cmath> #include <iostream> using namespace std; typedef double R; class complex { public : R re,imag; // Constructeurs: complex(R,R);// contructeur par defaut complex(complex&);// constructeur par copie // Methodes : complex getconjugue(); R getmodule(); void getdata(); R getreel(); R getimaginaire(); // Operateurs : bool operator ==(complex); void operator =(complex); friend ostream& operator <<(ostream &s,complex &c); complex operator +(complex); complex operator -(complex); complex operator *(complex); complex operator /(complex); }; // Constructeur par defaut complex::complex(R r=0.0,R im=0.0) { re=r; imag=im; } // Constructeur par copie complex::complex(complex &c) { this->re=c.re; this->imag=c.imag; } // Methode pour obtenir le conjugue complex complex::getconjugue() { complex res; res.re=this->re; res.imag=this->imag * (-1); return res; } // Methode pour obtenir le module R complex::getmodule() { R z; z=(re*re)+(imag*imag); z=sqrt(z); return z; } // Methode permettant a l'utilisateur d'entrer les valeurs void complex::getdata() { cout<<"Quelle est la partie reelle?"; cin>>this->re; cout<<"Quelle est la partie imaginaire?"; cin>>this->imag; } // Methode pour obtenir la partie reelle d'un complex R complex::getreel() { return re; } // Methode pour obtenir la partie imaginaire d'un complex R complex::getimaginaire() { return imag; } //Operateur = pour les complex void complex::operator =(complex c) { re=c.re; imag=c.imag; } // Operateur + pour les complex complex complex::operator +(complex c) { complex res; res.re=this->re+c.re; res.imag=this->imag+c.imag; return res; } //Operateur - pour les complex complex complex::operator -(complex c) { complex res; res.re=this->re - c.re; res.imag=this->imag - c.imag; return res; } //Operateur * pour les complex complex complex::operator *(complex c) { complex res; res.re=(re*c.re)-(imag*c.imag); res.imag=(re*c.imag)+(imag*c.re); return res; } // Operateur / pour les complex complex complex::operator /(complex c) { R div=(c.re*c.re) + (c.imag*c.imag); complex res; res.re=(re*c.re)+(imag*c.imag); res.re/=div; res.imag=(imag*c.re)-(re*c.imag); res.imag/=div; return res; } // Operateur logique pour les complex bool complex::operator ==(complex c) { return (re==c.re)&&(imag==c.imag) ? 1 : 0; } // Operateur << pour les complex ostream& operator <<(ostream &s,complex &c) { s<<"partie reelle = "<<c.re<<endl <<"partie imaginaire = "<<c.imag<<endl; s<<"z = "<<c.re <<c.imag<<"i"<<endl; return s; } int main() { complex a(2,-4); // Appel au constructeur cout<<a<<endl; // affiche la valeur de a grace a l'operateur << complex b(a); // appel au constructeur complex c=b; // appel au constructeur par copie c=a; b.getdata(); // appel a getdata : c'est l'utilisateur qui va entrer les valeurs de b c.getdata(); if(b==c) // verifie si b et c sont egaux cout<<"b = c"; else cout<<"b est different de c"; cout << "le conjugue de c est " << c.getconjugue()<< endl; cout << "le module de b est " << b.getmodule()<<endl; complex d; d=a+b; cout<<d<<endl; d=a-b; cout<<d<<endl; d=a*b; cout<<d<<endl; d=a/b; cout<<d<<endl; return 0; }
Merci
-----