Probleme operateurs en C++
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

Probleme operateurs en C++



  1. #1
    invite690e7e9c

    Probleme operateurs en C++


    ------

    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:
    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;
    }
    Qu'en pensez-vous?
    Merci

    -----

  2. #2
    invite88ef51f0

    Re : Probleme operateurs en C++

    Salut,
    Que donne la compilation ? Un compilateur est vachement plus efficace qu'un humain pour débusquer des erreurs...

  3. #3
    invite690e7e9c

    Re : Probleme operateurs en C++

    Voila le genre d'erreurs qu'il donne..

    172 C:\Documents and Settings\pc\Desktop\M2\C++\cla sscomplex.cpp no match for 'operator<<' in 'std::operator<< [with _Traits = std::char_traits<char>](((std::basic_ostream<char, std::char_traits<char> >&)(&std::cout)), ((const char*)"le conjugue de c est ")) << complex::getconjugue()()'

    177 C:\Documents and Settings\pc\Desktop\M2\C++\cla sscomplex.cpp initializing argument 1 of `void complex::operator=(complex)'

    179 C:\Documents and Settings\pc\Desktop\M2\C++\cla sscomplex.cpp no matching function for call to `complex::complex(complex)'

    179 C:\Documents and Settings\pc\Desktop\M2\C++\cla sscomplex.cpp initializing argument 1 of `void complex::operator=(complex)'

    181 C:\Documents and Settings\pc\Desktop\M2\C++\cla sscomplex.cpp no matching function for call to `complex::complex(complex)'

    181 C:\Documents and Settings\pc\Desktop\M2\C++\cla sscomplex.cpp initializing argument 1 of `void complex::operator=(complex)'

  4. #4
    acx01b

    Re : Probleme operateurs en C++

    salut

    rajoute une méthode
    ostream& operator <<(ostream &s, const complex &c)
    ça sera utile pour des choses du genre

    cout << complex(2,4);

    où complex(2,4) renvoie une référence constante si je ne dis pas de bétise

    tu as ici une chose équivalente avec l'appel de
    complex complex::getconjugue()

  5. A voir en vidéo sur Futura

Discussions similaires

  1. opérateurs différentielle
    Par invite14ace06c dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 24/10/2009, 19h51
  2. opérateurs
    Par invite473b98a4 dans le forum Physique
    Réponses: 9
    Dernier message: 27/04/2009, 10h28
  3. operateurs
    Par invitea180b11d dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 19/03/2008, 11h06
  4. Opérateurs
    Par invitef47010ed dans le forum Physique
    Réponses: 1
    Dernier message: 24/01/2008, 21h30
  5. Operateurs Tensoriel en MQ
    Par invite2e8ce853 dans le forum Physique
    Réponses: 11
    Dernier message: 06/12/2004, 11h07
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...