C++重载*=运算符时如何返回调用该函数的对象?
重载Fraction类*=运算符返回自身的实现
要实现更新调用对象后直接返回它、不创建新对象的需求,只需要做两处修改:
- 修改函数返回类型为引用:将原返回类型
Fraction改为Fraction&,避免返回时触发对象拷贝 - 返回当前对象本身:用
return *this;替代原占位符,*this就是已经完成更新和化简的调用对象实例
修改后的完整代码:
Fraction& Fraction::operator *= (const Fraction& rightOp) { numerator = numerator * rightOp.numerator; denominator = denominator * rightOp.denominator; simplify(); return *this; }
补充说明
- 复合赋值运算符(
*=、+=等)的标准设计惯例就是返回左操作数的引用,这和C++内置类型的行为保持一致,同时支持链式调用(比如f1 *= f2 *= f3;) this是成员函数中指向当前调用对象的指针,*this解引用后就是对象本身,返回它的引用直接返回已更新的原对象,完全不会创建新对象
内容的提问来源于stack exchange,提问作者Tem195
相关产品推荐
相关产品推荐

