【发布时间】:2016-03-30 08:53:32
【问题描述】:
你能解释一下为什么这段代码不起作用。 运算符+覆盖:
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;
}
operator= 覆盖:
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) 理解为一个对象? 谢谢。
【问题讨论】:
-
编译器应该对此发出警告;但是使用
Fraction::operator+,您将返回对局部变量的引用。 -
您的
operator+返回对局部变量的引用,这是未定义的行为。Fraction res = g;是一个初始化,它不会导致调用operator=。 -
仅供参考,这是本网站上最好的问题和答案堆栈之一,Operator Overloading。值得一读。
标签: c++ class oop operator-keyword overriding