2011-04-18 6 views
0

Tout le code fonctionne correctement sans erreur mais la commande Setreal() et Setimag() ci-dessous donnent une mauvaise sortie.Classe C + mauvaise sortie


#include <iostream> 
using namespace std; 

class complex 
{ public: 
    bool Readcomplex() 
    { cout<<"Enter the real part"<<endl; 
     cin>>real; 
     cout<<"Enter the imaginary part"<<endl; 
     cin>>imag; 
     return true; }; 
    double Getreal() 
    { return real; 
      }; 
    double Getimag() 
    { return imag; 
      }; 
    double Add(complex c) 
    { real=real+c.real; 
     imag=imag+c.imag; 
      }; 
    double Setimag(double im) 
    { imag=im; 
      }; 
    double Setreal(double re) 
    { real=re; 
      }; 
    void Multiply(complex c) 
    { double x; 
     x=real*c.real-imag*c.imag; 
     imag=real*c.imag+imag*c.real; 
     real=x; 
      }; 
private: 
     double real; 
     double imag; 
    }; 
int main() 
{ complex A,B,E,R; 
double C,D; 
A.Readcomplex(); 
B.Readcomplex(); 
cout<<"The complex no. A is "<<A.Getreal()<<"+i"<<A.Getimag()<<endl; 
cout<<"The complex no. B is "<<B.Getreal()<<"+i"<<B.Getimag()<<endl; 
A.Add(B); //Result stored in A. 
cout<<"The complex no. A2 is "<<A.Getreal()<<"+i"<<A.Getimag()<<endl; 
cout<<"Set the real of A"<<endl; 
cin>>C; 
cout<<"and set the imaginary part"<<endl; 
cin>>D; 
cout<<"the new A is"<<A.Setreal(C)<<"+i"<<A.Setimag(D)<<endl; //WRONG OUTPUT 
A.Multiply(B); 
cout<<"The complex no. A is "<<A.Getreal()<<"+i"<<A.Getimag()<<endl; 
system("pause"); 
return 0;} 

Le mauvais résultat est à cout<<"the new A is"<<A.Setreal(C)<<"+i"<<A.Setimag(D)<<endl; //WRONG OUTPUT que le résultat est 1.#QNAN+i1.#QNAN au lieu d'être la valeur de C et D comme ça C+iD

Répondre

3

Ces méthodes doivent avoir une déclaration de retour:

double Setimag(double im) 
{ 
    return imag=im; 
}; 
double Setreal(double re) 
{ 
    return real=re; 
}; 
+0

Oui. cela fonctionne maintenant correctement, merci beaucoup GregC –

+1

Moins d'inquiétude, plus d'un, bienvenue sur ce site. – GregC

1
double Setreal(double re) 
{ 
    real=re; 
}; 

Cette fonction est censée retourner quelque chose du type double, mais elle ne le fait pas ...