我应该编写一个具有num和denom作为Fractions类的数据成员的程序。我还应该包含一个构造函数,它将两者都设置为1或允许用户初始化,为+的重载操作符函数,以及可以显示对象数据值的成员函数。此外,它应该禁止0为分母的价值。 如何允许用户更改分数的值?另外我应该怎么做才能禁止0被用作分母?当我运行我的程序时,它只显示前4行中的单词,但不允许用户输入。
#include <iostream>
using namespace std;
class Fractions
{
private:
int num;
int denom;
public:
Fractions() : num(1), denom(1) {}
Fractions(int numerator, int denominator)
: num(numerator), denom(denominator) {}
Fractions& operator+=(Fractions f);
int numerator() const { return num; }
int denominator() const { return denom; }
};
Fractions& Fractions::operator+=(Fractions f)
{
if (denom != f.denom)
{
int new_base = denom * f.denom;
num *= new_base / denom;
denom = new_base;
f.num *= new_base / f.denom;
f.denom = new_base;
}
num += f.num;
return *this;
}
// operator+ is commonly implemented in terms of operator+=
Fractions operator+(Fractions a, const Fractions& b)
{
return a += b;
}
std::ostream& operator<<(std::ostream& os, const Fractions& f)
{
os << f.numerator();
if (f.denominator() != 1)
os << '/' << f.denominator();
return os;
}
int main()
{
int w, x, y, z;
Fractions a(w, x);
Fractions b(y, z);
std::cout << "Enter the first numerator: " << endl;
std::cin >> w;
std::cout << "Enter the first denominator: " << endl;
std::cin >> x;
std::cout << "Enter the second numerator: " << endl;
std::cin >> y;
std::cout << "Enter the second denominator: " << endl;
std::cin >> z;
std::cout << a << " + " << b << " = " << a + b << '\n';
}
答案 0 :(得分:0)
您应该在用户输入后使用变量:
int main()
{
int w, x, y, z;
std::cout << "Enter the first numerator: " << endl;
std::cin >> w;
std::cout << "Enter the first denominator: " << endl;
std::cin >> x;
std::cout << "Enter the second numerator: " << endl;
std::cin >> y;
std::cout << "Enter the second denominator: " << endl;
std::cin >> z;
Fractions a(w, x);
Fractions b(y, z);
std::cout << a << " + " << b << " = " << a + b << '\n';
}
答案 1 :(得分:0)
您的代码中存在几个问题。
最重要的是,在读取用户输入之前初始化分数,而之后应该初始化它们。因此,代码中的cout
行只会产生垃圾。
为了允许用户更改值,您可以实现函数
int & numerator() { return num; }
和
int & denominator() { return num; }
然后使用
例如 a.numerator() = 5
。
此外,您可能希望更改代码,以使operator+
未实现为operator+=
。