Advertisement
AntonioVillanueva

Exercice de redéfinition des opérateurs internes et externes c++

Aug 19th, 2021
1,900
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.75 KB | None | 0 0
  1. //Exercice de redéfinition des opérateurs internes et externes
  2. //Exercice 52 ,nombres complexes surcharge d'operateurs
  3. #include <iostream>
  4. using namespace std;
  5. /***********************************************************************/
  6. /***********************************************************************/
  7. class Complexe {
  8.     public:
  9.     //Complexe ();
  10.     Complexe (double _r,double _i);//Constructeur avec 2 doubles
  11.     Complexe(Complexe *c);//Constructeur depuis un Complexe
  12.    
  13.     double getR()const ;//récupére la partie réelle du nombre  R
  14.     double getI()const ;//récupére la partie imaginaire  du nombre i
  15.    
  16.     void setR(double _r) ;//Set partie réeelle R
  17.     void setI(double _i) ;//Set partie imaginaire i
  18.    
  19.     //Surcharge interne operateur ==
  20.     bool operator==(const Complexe& c) const ;
  21.    
  22.     //Surcharge interne operateur +
  23.     Complexe operator+(const Complexe& c) ;
  24.    
  25.     //Surcharge interne operateur +=   
  26.     void operator+=(const Complexe& c)  ;
  27.    
  28.     //Surcharge interne operateur -=
  29.     void operator-=(const Complexe& c) ;
  30.    
  31.     //Surcharge interne operateur *=
  32.     void operator*=(const Complexe& c) ;
  33.    
  34.     private:
  35.     double r,i ;//Partie reel et imaginaire
  36. };
  37.  
  38. Complexe::Complexe(double _r=0.0,double _i=0.0):r(_r),i(_i){}
  39. Complexe::Complexe(Complexe *c):r(c->getR()),i(c->getI()){}
  40.  
  41. double Complexe::getR() const{return r;}
  42. double Complexe::getI() const{return i;}
  43.  
  44. void Complexe::setR(double _r){r=_r;}//Set partie réeelle R
  45. void Complexe::setI(double _i){i=_i;}//Set partie imaginaire i 
  46.  
  47. //Operateur Interne == l'opérateur interne == est redéfini
  48. bool Complexe::operator==(const Complexe& c) const {
  49.     if ( r==c.getR() && r==c.getI() ){return true;}
  50.     return false;
  51. }
  52.  
  53. //Operateur Interne + l'opérateur interne + est redéfini
  54. Complexe Complexe::operator+(const Complexe& c) {
  55.     Complexe tmp;
  56.    
  57.     tmp.setR(r+c.getR());
  58.     tmp.setI(i+c.getI());
  59.     return tmp;
  60.    
  61. }
  62.  
  63. //Operateur Interne += l'opérateur interne += est redéfini
  64. void Complexe::operator+=(const Complexe& c) {
  65.     r=r+c.getR();
  66.     i=i+c.getI();
  67. }
  68.  
  69. //Operateur Interne += l'opérateur interne -= est redéfini
  70. void Complexe::operator-=(const Complexe& c) {
  71.     r=r-c.getR();
  72.     i=i-c.getI();
  73. }
  74.  
  75. //Operateur Interne *= l'opérateur interne *= est redéfini
  76. void Complexe::operator*=(const Complexe& c) {
  77.     Complexe tmpA(this);
  78.     Complexe tmpB(c);  
  79.    
  80.     r= tmpA.getR() * tmpB.getR() + (tmpA.getI() * tmpB.getI())*(-1) ;//R
  81.        
  82.     i=  (tmpB.getR() * tmpB.getI()) + ( tmpB.getR() * tmpA.getI()) ;//i
  83.  
  84. }
  85.  
  86.  
  87.  
  88. /***********************************************************************/
  89. /***********************************************************************/
  90. //Operateurs externes
  91. //Operateur externe cout<< , l'opérateur  << externe est redéfini
  92. ostream& operator<<(ostream& sortie , const Complexe& c){
  93.     cout <<c.getR()<<"+i"<<c.getI();
  94.     return sortie;
  95. }
  96.  
  97.  
  98. /***********************************************************************/
  99. /***********************************************************************/
  100. int main (){
  101.     Complexe defaut;
  102.     Complexe zero (0.0,0.0);
  103.     Complexe un (1.0,0.0);
  104.     Complexe i(0.0,1.0);
  105.     Complexe y(0.2,3.0);   
  106.     Complexe j;
  107.     Complexe trois(y);
  108.     Complexe deux (2.2,4.3);
  109.    
  110.    
  111.     cout <<zero <<" ==? "<<defaut;
  112.     //avec l'opérateur interne == redéfini on effectue une comparaison
  113.     cout << ((zero == i) ?" oui ":" non "); //Comparaison ==
  114.    
  115.     j=un+y;//Complexe un +y  somme
  116.    
  117.     //Avec la surcharge de l'opérateur  cout << on voit la valeur du complexe R+i
  118.     cout <<endl<<"J= "<<j<<endl;
  119.    
  120.     cout <<trois<<endl;//cout << surcharge
  121.  
  122.     trois+=un;//somme +=
  123.    
  124.     cout <<trois<<endl;
  125.    
  126.     deux-=y;//Soustraction  -=
  127.    
  128.     cout <<deux<<endl; 
  129.    
  130.    
  131.     Complexe quatre(4.0,3.0);
  132.    
  133.     quatre *= quatre;//Multiplication *=
  134.    
  135.     cout <<quatre<<endl;//cout << surcharg
  136.    
  137.     return 0;
  138. }
  139.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement