首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何允许用户更改分数的值?

如何允许用户更改分数的值?
EN

Stack Overflow用户
提问于 2014-03-17 14:25:50
回答 2查看 93关注 0票数 0

我应该编写一个程序,将num和denom作为Fraction类的数据成员。我还应该包括一个将两者都设置为1或允许用户初始化的构造函数,一个用于+的重载操作符函数,以及一个可以显示对象数据值的成员函数。另外,它应该禁止分母的值为0。如何允许用户更改分数的值?另外,我应该怎么做才能禁止0被用作分母?WHen我运行我的程序,它只显示前4行的单词,但不允许用户输入。

代码语言:javascript
复制
#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';
}
EN

回答 2

Stack Overflow用户

发布于 2014-03-17 14:32:38

你应该在用户输入后使用变量:

代码语言:javascript
复制
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';

}

票数 0
EN

Stack Overflow用户

发布于 2014-03-17 14:33:39

您的代码中有几个问题。

最重要的是,在读取用户输入之前初始化分数,而应该在读取之后初始化它们。因此,代码中的cout行只会产生垃圾。

为了允许用户更改这些值,您可以实现函数

int & numerator() { return num; }

int & denominator() { return num; }

然后使用

例如,a.numerator() = 5

此外,您可能希望更改代码,以便不将operator+实现为operator+=

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22448144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档