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;
}