[C++] Przeciazenie << nie dziala

0

Mam taki przykład programu z wykładu, który nie działał z powodu poknoconych nazw, ale okazuje się, że dalej coś jest nie tak. W tej chwili nie wywala żadnych błędów, ale problem w tym, że zamiast wpisanych liczb, obiekt pokazuje wartości domyślne z konstruktora.

/*std::cout << "Prosze podac czesc urojona liczby zespolonej"
	<< " i nacisnac enter" << std::endl;
	
	std::cin >> pierwsza; */

To zakomentowałem, bo nic nie robiło i wydaje mi się, że nie potrzeba kolejny raz tego podawać.


#include <iostream>

class zespolone
{
	
	public:
	int re, im;	
	zespolone(int , int);
	
	friend std::ostream & operator << (std::ostream &, zespolone);
	friend std::istream & operator << (std::istream &, zespolone);	
};

zespolone::zespolone(int m, int n)
{
	re = m;
	im = n;
}

std::ostream & operator<<(std::ostream & wyjscie, zespolone z1)
{
	wyjscie << "("<<z1.re <<","<< z1.im << ")" << std::endl;
	return wyjscie;
}

std::istream & operator>>(std::istream & wejscie, zespolone z1)
{
	wejscie >> z1.re;
	wejscie >> z1.im;
	
	return wejscie;
}

int main(void) {
	zespolone pierwsza(0,0);
	
	std::cout << "Prosze podac czesc rzeczywista liczby zespolonej"
	<< " i nacisnac enter" << std::endl;
	
	std::cin >> pierwsza;
	
	/*std::cout << "Prosze podac czesc urojona liczby zespolonej"
	<< " i nacisnac enter" << std::endl;
	
	std::cin >> pierwsza; */
	
	std::cout << "Podano liczbe zespolona" << pierwsza;
	
	
	return 0;
}

Z góry dzięki wielkie.

1

Na pierwszy rzut oka

std::istream & operator>>(std::istream & wejscie, zespolone &z1)
1

Porównaj do tego:

#include <iostream>

using namespace std;

class Complex {
	
	private:
	double re;
	double im;
	public:
	Complex(double a, double b) {
		re = a;
		im = b;
	}
	friend ostream &operator<<(ostream & out, const Complex &c) {
		out << "Re: " << c.re << " Im: " << c.im;
		return out;
	} 


}; 

int main() {
	Complex c{1.0, 1.0};
	cout << c;
	cout << "\n";
}
2
    friend ostream &operator<<(ostream &out, const Complex &c) { return out<<"Re: "<<c.re<<" Im: "<<c.im; } 
1

Dlaczego?
Bo przekazujesz obiekt przez wartość nie referencję. Obiekt ma zmienione wartości tylko w przeciążonej funkcji operatorowej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1