【问题标题】:Object manipulation using functions使用函数操作对象
【发布时间】:2018-08-04 19:27:37
【问题描述】:

我目前正在为学校开设分数课程。我们的教科书希望我们的函数能够操作主代码中显示的值。为什么 m_numer 和 m_denom 的值没有更新?

class Fraction
{
public:
    Fraction();
    Fraction(int numer, int demon);
    void Add(Fraction left_frac, Fraction right_frac)const;
    void Subtraction(Fraction let_frac, Fraction right_frac)const;
    Fraction & Multiply(Fraction let_frac, Fraction right_frac)const;
    void Divide(Fraction let_frac, Fraction right_frac)const;
    void Display() const;
    int GetNumer() const;
    void SetNumer(int numer);
    int GetDenom() const;
    void SetDenom(int denom);
    ~Fraction();

private:
    int m_numer;
    int m_denom;
    void reduce();
};

Fraction & Fraction::Multiply(Fraction left_frac, Fraction right_frac) const
{
    Fraction result;

    result.m_numer = left_frac.GetNumer() * right_frac.GetNumer();
    result.m_denom = left_frac.GetDenom() * right_frac.GetDenom();

    return result;
}

int main()
{
    Fraction f1 (1, 2),
             f2 (3, 4), 
             f3;

    f3.Multiply(f1, f2);

    f1.Display();
    cout << " * ";
    f2.Display();
    cout << " = ";
    f3.Display();

    return 0;
}

【问题讨论】:

  • 我不明白你的问题
  • 在调用 f3.Multiply(f1, f2) 时,m_numer 和 m_denom 的值应该保存到 f3 中。但是,使用我当前的代码,这不会发生。
  • 我认为 Add etc 应该是朋友而不是成员

标签: c++ class oop


【解决方案1】:

这个函数正在创建一个新的分数并返回它。

Fraction & Fraction::Multiply(Fraction left_frac, Fraction right_frac) const
{
    Fraction result;

    result.m_numer = left_frac.GetNumer() * right_frac.GetNumer();
    result.m_denom = left_frac.GetDenom() * right_frac.GetDenom();

    return result;
}

如果您希望它修改分数的值,您可以更改它,使其看起来像这样。

void Fraction::Multiply(Fraction left_frac, Fraction right_frac)
{
    m_numer = left_frac.GetNumer() * right_frac.GetNumer();
    m_denom = left_frac.GetDenom() * right_frac.GetDenom();
}

在您的示例中,这将使f3 = f1 * f2

【讨论】:

  • return result; 无效;它返回一个对死变量的引用。
  • @melpomene 你是对的。删除了const。为清楚起见,return result 只是从问题中复制而来。我知道这不正确。
猜你喜欢
  • 2018-03-10
  • 2017-05-28
  • 2021-11-23
  • 2020-11-20
  • 1970-01-01
  • 2016-11-20
  • 2016-08-20
  • 1970-01-01
  • 2020-02-12
相关资源
最近更新 更多