2017-06-01 1 views
1

クラスc1の代入演算子をオーバーロードしますが、クラスc1とc2を加算するために加算演算子をオーバーロードします。オーバーロード代入演算子、rhsは関数呼び出しです

// signatures of the overloaded operators: 
c2 c1::operator+(c2 & obj_c2); 
c1& c1::operator=(c2& obj_c2); 


// use them like this: 
c1 obj1; 
c2 ojb2; 
obj1=obj1+ojb2; 

これはエラーとしてコンパイルされます。しかし、私は一時的なオブジェクトを使用すると、それは動作します:

c1 obj1; 
c2 ojb2, temp; 
temp=obj1+ojb2; 
obj1=temp; 

私が使用したコンパイラは、どのように一時的なオブジェクトなしで問題になることができますか?

+0

加算演算子を参照を返すか、値をとる別の代入演算子を追加します。 – Barmar

+3

[canonical operator overload implementation](http://en.cppreference.com/w/cpp/language/operators#Canonical_implementations)をチェックすることをお勧めします。代入演算子への引数が* 'const' *への参照であることに注目してください。 –

答えて

1

だけ演算子=の実装を注意深く見:

c1& c1::operator=(c2& obj_c2); 

ここ演算子=参照で引数を受け入れます。しかし、参照は一時オブジェクトにバインドできません。 2番目の例では、参照はtempにバインドされています。これは一時的なものではありません。

動作するはず
c1& c1::operator=(const c2& obj_c2); 

:あなたの演算子=が変更に問題を解決するために

+0

ありがとう、それは動作します!つまり、一時オブジェクトは参照することはできませんが、const参照することができます。 –

関連する問題