#include <iostream>
using namespace std;
class complex
{
private:
double re,im;
public:
complex(double real=0,double imaginary=0) : re(real),im(imaginary){}
friend ostream & operator<< (ostream & screen,complex & liczba);
friend istream & operator>> (istream & keyboard,complex & liczba);
friend complex & operator+ (complex & liczba1,complex & liczba2);
};
ostream & operator<< (ostream & screen,complex & liczba)
{
screen << liczba.re << "+" << liczba.im << "j";
return screen;
}
istream & operator>> (istream & keyboard,complex & liczba)
{
cout << "Re: ";
keyboard >> liczba.re;
cout << "Im: ";
keyboard >> liczba.im;
return keyboard;
}
complex & operator+ (complex & liczba1,complex & liczba2)
{
complex sum;
sum.re=liczba1.re+liczba2.re;
sum.im=liczba1.im+liczba2.im;
return sum;
}
int main()
{
cout << "Podaj a" << endl;
complex a; cin >> a;
cout << "Podaj b" << endl;
complex b; cin >> b;
cout << a+b;
return 0;
}
Po 1:
Dlaczego część rzeczywistą liczby zespolonej dodaje mi prawidłowo, a przypadku części urojonej wychodzą jakieś głupoty? Jak stworzę np. obiekt c, a następnie wykonam c=a+b to wtedy jest git, ale mnie interesuje czemu nie działa mi taki zapis jak powyżej.
Po 2: Jak już uda się ogarnąć zagadnienie powyżej to chciałbym tak przeładować operator >> aby użytkownik wprowadzał po prostu napis 3+5j i od razu program będzie wiedział, że wprowadziłem dla danego obiektu część rzeczywistą liczba.re=3 i część urojoną liczba.im=5 . Próbowałem sam to zrobić niestety z marnym skutkiem.
ostream & operator<< (ostream & screen, complex & liczba)
- czyliconst complex X(1);
nie chcesz umieć wyświetlić.