なぜこのコードが機能しないのか説明できますか? オペレータ+オーバーライド:C++演算子のオーバーライド
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;
}
演算子=オーバーライド:RESの
void Fraction::operator=(const Fraction& f) {
this->numerator = f.numerator;
this->denominator = f.denominator;
}
コード後
Fraction res;
res = f + g;
フィールドは初期化されていない滞在します。 たとえば、コード
Fraction res = g;
が正しく機能しています。だから演算子=(f + g)を1つのオブジェクトとして理解していないのですか?おかげさまで
コンパイラはこれについて警告する必要があります。しかし '' Fraction :: operator + '' 'を使うと、ローカル変数への参照を返しています。 –
'operator +'はローカル変数への参照を返します。これは未定義の動作です。'Fraction res = g;'は初期化であり、 'operator ='を呼び出すことはありません。 – user657267
Fyiは、このサイトの最善の質問と回答スタックの一つであり、[** Operator Overloading **](https://stackoverflow.com/questions/4421706/operator-overloading)です。それは読む価値がある。 – WhozCraig