c++ - C++ 中的重载运算符 -=

标签 c++ overloading operator-keyword

<分区>

我已经为我的 Rational 类定义了 operator -= 的重载:

rational.hh:
class Rational {

public:
    Rational(int numerator, int denominator) : numerator(numerator), denominator(denominator)
    { }

    int getNumerator() const;
    int getDenominator() const;
    Rational& operator-=(const Rational& bar);

private:
    int numerator, denominator;

rational.cc:
Rational& Rational::operator-=(const Rational& subtracted) {
    Rational result((*this).getNumerator()*subtracted.getDenominator() - (*this).getDenominator()*subtracted.getNumerator(), (*this).getDenominator()*subtracted.getDenominator());
    return *this;
}

代码在没有警告的情况下编译,但是这段代码没有改变 r 的值:

  Rational r(1, 1);
  r -= Rational(1, 2);

有什么想法吗?

最佳答案

您的 -= 运算符应该更改 numeratordenominator 的值,但它没有。添加代码以将这些值设置到 this 中,而不是创建 result:

Rational& Rational::operator-=(const Rational& subtracted) {
    numerator = (*this).getNumerator()*subtracted.getDenominator() - (*this).getDenominator()*subtracted.getNumerator();
    denominator = (*this).getDenominator()*subtracted.getDenominator();
    return *this;
}

关于c++ - C++ 中的重载运算符 -=,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12666388/

相关文章:

c++ - 模板实例化 - 对某些类使用 C++11 的 sizeof...() 运算符时没有匹配函数

c# - 如何使一个方法采用两种不同的类型

C++11:通用执行器

c# - 管道运算符(operator),它是如何工作的?

c++ - opencv数组大于255

c++ - 在 C++ 中隐藏加密 key 的跨平台方式?

c++ - 无法通过 C++ 中的隐式转换找到运算符

c++ - 为什么以下运算符重载不明确?

c++ - 为什么下面的代码中a和b共享相同的地址?

java - 使用许多可选参数有效地重载函数