メインのオブジェクトで Add() 関数が使用された後、Print() 関数が正しく更新されないのはなぜですか?
int main()
{
Rational myRational(3,5);
myRational.Print(); //Displays 3/5 as expected
myRational.Add(2);
myRational.Print(); //Displays 3/5 instead of 13/5
return 0;
}
//from Rational.cpp
//Overloaded constructors
Rational::Rational() :
num(0),
denom(1)
{
}
Rational::Rational(int n) :
num(n),
denom(1)
{
}
Rational::Rational(int n, int d) :
num(n),
denom(d)
{
}
Rational Rational::Add(const Rational& r1) const
{
int numerat = num * r1.getDenominator() +
denom * r1.getNumerator();
int denomin = denom * r1.getDenominator();
return Rational(numerat, denomin);
}
void Rational::Print()
{
cout << num << "/" << denom <<endl;
}
コードをデバッグすると、Add 関数は値 13 と 5 を期待どおりに返し、正しいコンストラクターも同様に返します。残念ながら、Print() 関数は、新しい値ではなく元の分数を保持します。