[C++] Operator >> klasy istream

gocek
Użytkownik
Użytkownik
Posty: 1
Rejestracja: 2 kwie 2012, o 15:52
Płeć: Mężczyzna
Lokalizacja: sopot

[C++] Operator >> klasy istream

Post autor: gocek »

Cześć!

Mam następujący problem:
kompilując program zamieszczony poniżej po wczytaniu liczb wykonany jest konstruktor bezargumentowy, czyli wpisywane są wartości stałe, wbrew mojej woli, zamieszczonej w operatorze istream >>. Mógłby mi kotś wyjaśnić na czym polega problem?

Kod: Zaznacz cały

#include <iostream>
#include <cmath>
using namespace std;
class Rat {
	public:
		int p;
		int q;
		Rat(void): p(0), q(0) {}
		Rat(int r): p(r), q(1) {}
		Rat(int a, int b): p(a), q(b) {}
		int numerator(void) const { return p; }
		int denominator(void) const { return q; }

		void operator +=(Rat w);
		Rat operator +(Rat w) const;
		void operator *=(Rat w);
		Rat operator *(Rat w) const;
		void operator -=(Rat w);
		Rat operator -(Rat w) const;
		void operator /=(Rat w);
		Rat operator /(Rat w) const;
		friend ostream& operator <<(ostream& out, Rat m);
		friend istream& operator >>(istream& in, Rat m);
};

void Rat::operator +=(Rat w)
{
	p = p*w.q + w.p*q;
	q = q*w.q;
}

Rat Rat::operator +(Rat w) const
{
	return Rat(p*w.q + w.p*q, q*w.q);
}

void Rat::operator -=(Rat w)
{
	p -= p*w.q - w.p*q;
	q -= q*w.q;
}

Rat Rat::operator -(Rat w) const
{
	return Rat(p*w.q - w.p*q, q*w.q);
}

void Rat::operator *=(Rat w)
{
	p *= w.p;
	q *= w.q;
}

Rat Rat::operator *(Rat w) const
{
	return Rat(p*w.p , q*w.q);
}

void Rat::operator /=(Rat w)
{
	p *= w.q;
	q *= w.p;
}

Rat Rat::operator /(Rat w) const
{
	return Rat(p*w.q, q*w.p);
}

ostream& operator <<(ostream& out, Rat m)
{
	return out << m.numerator() << "/" << m.denominator() ;
}

istream& operator >>(istream& in, Rat m)
{
        return in >> m.p >> m.q ;
}

int main()
{	Rat A, B;
	cin >> A;
	cout << "A = " << A << endl;
	cin >> B;
	cout << "B = " << B << endl;
	Rat C;
	C = A + B;
	return 0;
}
Ostatnio zmieniony 4 kwie 2012, o 22:10 przez Afish, łącznie zmieniany 1 raz.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania.
bartek118
Użytkownik
Użytkownik
Posty: 5974
Rejestracja: 28 lut 2010, o 19:45
Płeć: Mężczyzna
Lokalizacja: Toruń
Podziękował: 15 razy
Pomógł: 1251 razy

[C++] Operator >> klasy istream

Post autor: bartek118 »

Kod: Zaznacz cały

friend istream& operator >>(istream& in, Rat m);
Powinnieneś tutaj przekazywać referencję:

Kod: Zaznacz cały

friend istream& operator >>(istream& in, Rat& m);
ODPOWIEDZ