c++ - += C++ 重载问题

标签 c++ function operator-overloading overloading

我试图为我的有理数类重载 += 运算符,但我不认为它有效,因为我总是得到相同的结果:

RationalNumber RationalNumber::operator+=(const RationalNumber &rhs){

   int den = denominator * rhs.denominator;

   int a = numerator * rhs.denominator;
   int b = rhs.numerator * denominator;
   int num = a+b;

   RationalNumber ratNum(num, den);
   return ratNum;
}

内部主要

//create two rational numbers
RationalNumber a(1, 3);
a.print();

RationalNumber b(6, 7);
b.print();

//test += operator
a+=(b);
a.print();

调用a+=(b)后,a还是1/3,应该是25/21。知道我做错了什么吗?

最佳答案

operator+= 应该修改对象本身并返回一个引用。相反,您正在创建一个新对象并返回它。这样的事情可能会起作用(未经测试的代码):

RationalNumber &RationalNumber::operator+=(const RationalNumber &rhs){

   int den = denominator * rhs.denominator;

   int a = numerator * rhs.denominator;
   int b = rhs.numerator * denominator;
   int num = a+b;

   numerator = num;
   denominator = den;
   return *this;
}

同样,operator+ 应该返回一个新对象,并且几乎总是可以根据 operator+= 来实现:

RationalNumber RationalNumber::operator+(const RationalNumber &rhs){
    RationalNumber tmp(*this);
    tmp += rhs;
    return tmp;
}

最后,(现在我要跑题了)通常认为最好的做法是使用自由函数而不是成员,因为二元运算符之类的东西可以使用。

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

相关文章:

c++ - 我的程序是 "Killed"

c++ - 在 cpp 文件中设置静态枚举变量的正确方法

c++ - 默认模板参数 : Why does the compiler complain about not specifying template argument?

c++ - 如何从 C++ 中自己的定义递归调用类成员函数?

c++ - 制作一个从函数返回字符串的数字拼写程序

c++ - 在 std::map 中使用(数学) vector

perl - 我如何在 Perl 中比较字母及其对应的(按字母顺序排列的)数字?

c++ - 为什么同一个对象方法被调用两次?

c++ - 从指针 vector 调用函数

c++ - 运算符 << 重载的解释