我的程序应该简化num和denom。但我必须使用一个类,并使用显示功能来显示我的最终结果,但每次我显示它。它给我82个数字和21305 ...对于书房。它就像没有从Fraction :: set获得数字。
任何人都可以向我解释我做错了什么,以及我不喜欢使用课程。谢谢你,并提前。
#include <iostream>
using namespace std;
class Fraction
{
int num, den;
public:
void set(int,int);
void display();
};
int main(void) {
Fraction fraction;
int num, den;
cout << "Fraction Simplifier" << endl;
cout << "===================" << endl;
cout << "Numerator : ";
cin >> num;
cout << "Denomenator : ";
cin >> den;
cout << endl;
fraction.set(num, den);
fraction.display();
cout << endl;
return 0;
}
void Fraction::set(int num, int den)
{
int i;
for( i = num * den; i > 1; i--)
{
if(den % i == 0 && num % i == 0)
{
den/=i;
num/=i;
}
}
}
void Fraction::display()
{
cout << num << endl;
cout << den << endl;
}
答案 0 :(得分:1)
在Fraction::set
内,无论何时引用num
或den
,都是函数参数。
最后,您可能希望将这些值“保存”到成员变量中,使用this->
消除歧义†:
this->num = num;
this->den = den;
†这不是消歧,但是你知道。
答案 1 :(得分:0)
在你的Fraction :: set定义中,你传入变量num和den。由于这些变量与成员变量Fraction :: num和Fraction :: den具有相同的名称,因此它们“隐藏”了成员变量。
在你的函数中,你实际上从不使用成员变量,你只使用和修改传入的变量,并且成员变量在开始之前保持未初始化为程序对它们的任何值。
对于传入set函数的变量,使用不同的名称可能会更好。
实施例
void Fraction::set(int numValue, int denValue)
{
// format the values that were passed in
int i;
for( i = numValue * denValue; i > 1; i--)
{
if(denValue % i == 0 && numValue % i == 0)
{
denValue/=i;
numValue/=i;
}
}
// store the values in the class
num = numValue;
den = denValue;
}
您可能希望了解其他问题和问题以及最佳做法,但这对CodeReview论坛来说是一个问题。