2017-10-03 2 views
1

に関してのオーバーロード:オペレータとC++の問題は、これが私の主な機能であるほか

int main(){ 
    Complex c1(1.0, 5.0); 
    Complex c2(3.0,-2.0); 
    Complex c3(1.0, 2.0); 
    cout << "c1 + c2 + c3 = " 
     << c1 + c2 + c3 << endl; 
    return 0; 
} 

これは私が必要な数字

Complex& operator+(const Complex & x, const Complex & y){ 
    Complex c; 
    c.a = x.a + y.a; 
    c.b = x.b + y.b; 

    return c; 

} 

abは二重のプライベートなまで追加するために使用する機能です私のクラスの変数。私のプログラムを実行する上で

、私は1 + 2Iすなわち(C3)として出力を得るように見える、私だけが唯一の2つのオブジェクトを追加するときに、正しく動作するようです。既存のコードを修正して、それを最大限に活用できる方法はありますか?

+0

S/'コンプレックス&演算子+(CONSTコンプレックス&X、CONSTコンプレックス&Y ) '/' Complex演算子+(const Complex&x、const Complex&y) ' – user0042

+1

参照ではなく、新しいオブジェクトを作成しています。書かれているように、ぶら下がっている参照を返しています – CoryKramer

+0

ありがとうございました@CoryKramer –

答えて

3

あなたoperator +は、それが行われた後に破棄されますローカル変数c、への参照を返します。結果をさらに使用すると、の定義されていない動作が発生します。 あなたはそれがコピーされるので、を返す(またはrvalue)する必要はなく、参照

Complex operator+(const Complex & x, const Complex & y) {...}

関連する問題