gpt4 book ai didi

C++ 运算符覆盖

转载 作者:行者123 更新时间:2023-11-27 22:52:12 30 4
gpt4 key购买 nike

你能解释一下为什么这段代码不起作用吗?运算符+覆盖:

Fraction& Fraction::operator+(const Fraction& f) {
Fraction temp;
if (this->denominator == f.denominator){
temp.numerator = this->numerator + f.numerator;
temp.numerator = this->numerator;
temp.simplifier();
}
else {
temp.numerator = this->numerator * f.denominator + f.numerator * this->denominator;
temp.denominator = this->denominator * f.denominator;
temp.simplifier();
}
return temp;
}

运算符=覆盖:

void Fraction::operator=(const Fraction& f) {
this->numerator = f.numerator;
this->denominator = f.denominator;
}

代码之后

Fraction res;
res = f + g;

res 字段保持未初始化状态。但是,例如,代码

Fraction res = g; 

工作正常。所以 operator= 不能将 (f + g) 理解为一个对象?谢谢。

最佳答案

问题是您的重载正在返回对对象 temp 的引用,该对象在函数返回时被销毁。

在函数返回后访问该对象是未定义的。

改为按值返回:

Fraction Fraction::operator+(const Fraction& f)

Fraction res = g; 

不是赋值而是初始化,不会使用您的赋值运算符。

关于C++ 运算符覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36304007/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com