为什么我在这个c++代码中没有得到正确的结果(请参阅main中的f3.show_fraction())



当我在中看到f3使用show_fraction((函数时,我没有得到对象f3的正确结果下面的代码:我很困惑。我想访问f3中存储的f1和f2分数的总和。但当我在f3中看到结果时,它使用fraction_show((函数在结果中显示0/0

#include <iostream>
using namespace std;
class fraction
{
private:
float numerator;
float denominator;
char ch;
public:
void get_fraction()
{
cout << "nEnter the fraction ( in format n/d ): ";
cin >> numerator >> ch >> denominator;
}
void show_fraction()
{
cout << " Fraction is: " << numerator << "/" << denominator;
}
fraction sum(fraction &f, fraction &d) // returns sum of two fractions
{
fraction ff; // to hold the result
// denominator of result
ff.numerator = (f.numerator * d.denominator + f.denominator * d.numerator);
ff.denominator = f.denominator * d.denominator; // numerator of result
return ff;
}
};
int main() // program to test the class
{
fraction f1, f2, f3; // three objects of type fraction created
char ch1;
do
{
f1.get_fraction();
f2.get_fraction();
f3.sum(f1, f2);
cout << "nSum of ";
f3.show_fraction();                            // shows the result ( wrong result)
cout << "nDo you want to continue ( y/n ): "; // If the user want to continue
cin >> ch1;
} while (ch1 != 'n');
cout << endl;
return 0;
} // end of main

我不喜欢这种风格的编码,但至少它能在中工作

void sum(fraction &f, fraction &d) // calculates sum of two fractions
{
numerator = (f.numerator * d.denominator + f.denominator * d.numerator);
denominator = f.denominator * d.denominator;
}

然后

f3.sum(f1, f2);

我更喜欢这种

friend fraction sum(fraction &f, fraction &d) // returns sum of two fractions
{
fraction ff; // to hold the result
// denominator of result
ff.numerator = (f.numerator * d.denominator + f.denominator * d.numerator);
ff.denominator = f.denominator * d.denominator; // numerator of result
return ff;
}

对于这个版本,您需要更改调用函数的方式

f3 = sum(f1, f2);

我不确定你的意图,但你写的东西介于两个版本之间。

相关内容

最新更新