2010-08-27 5 views
1

Ici, j'essaie d'implémenter une classe pour les nombres complexes en utilisant des livres et Internet. Voici le code:Implémenter une classe de nombres complexes en C++

#include <iostream> 
#include <ostream> 
using namespace std; 
class Complex{ 
    private: 
     float re,im; 

    public: 
     Complex(float x,float y){ 
      re=x; 
      im=y; 
     } 

     float Re() const{ 
      re; 
     } 

     float Im() const { 
      return im; 
     } 

     Complex& operator*=(const Complex& rhs){ 
      float t=Re(); 
      re = Re()*rhs.Re()-Im()*rhs.Im(); 

      im = t*rhs.Im()+Im()*rhs.Re(); 
      return *this; 
     } 
}; 

ostream& operator<<(ostream& t,const Complex& c){ 
    t << c.Re() << " " << c.Im(); 
    return t; 
} 

int main(){ 
    Complex s(3.45,23.12); 
    return 0; 
} 

Il compile très bien, mais je ne peux pas trouver un moyen d'imprimer les parties réelles et imaginaires du numéro sur l'écran?

+0

En main, juste avant votre retour, mettez "cout << s << '\ n';". std :: cout est le périphérique "sortie standard"/terminal/écran/tty. '\ n' représente une nouvelle ligne, indiquant que la ligne est complète et passez à la ligne suivante. Il est toujours préférable de terminer votre sortie avec une nouvelle ligne, donc un autre programme qui ramène le curseur au début de la ligne ne l'écrasera pas et ne le cachera pas (les shells UNIX/Linux ont tendance à le faire). –

+6

Avez-vous regardé 'std :: complex'? – ereOn

+0

@Ian: Il y a un 'operator <<()'. – sbi

Répondre

2
#include <iostream> 

// ... 

Complex s(3.45,23.12); 
std::cout << s; 

Voir this answer pourquoi je pense que using namespace std; est une mauvaise idée.

En outre, je suppose que l'implémentation d'une classe pour les nombres complexes est un exercice? Parce que la bibliothèque standard en a déjà un.

0

Voir l'en-tête <complex> qui implémente std::complex ... que vous pourriez vouloir utiliser, sauf si vous voulez l'implémenter comme un exercice.

Voici a link au fichier d'en-tête GCC; toutes les opérations de base sont assez simplement mises en œuvre. En ce qui concerne l'impression à l'écran, que se passe-t-il? Votre operator<< a l'air bien.

+1

Cette tâche est très probablement un exercice dans la mise en œuvre de votre propre classe. – sbi

0

La solution ci-dessus fonctionnera. Je voudrais cependant changer la < < être mise en œuvre suivantes pour obtenir une sortie plus lisible (si c'est ce que vous voulez):

t<<c.Re()<< " + i"<<c.Im(); return t; 

À mon avis, cela montre la représentation d'une manière plus claire.

+0

2 choses: Je voudrais le «je» après la partie imaginaire et je voudrais utiliser une seule déclaration. –

Questions connexes