2012-05-03 19 views
2

は、私は次のコードを持っている: (単なる例)オーバーロードされた代入演算子のコードが実行されるかどうかを知る方法?

Sales_item s; 
Sales_item s1 = s; 

しかしLine 1は実行されませんでした。そして、

class Sales_item { 
    public: 
    int ii; 
     Sales_item& operator=(const Sales_item &item) 
    { 
     cout << "Inside assignment\n"; // Line 1 
     ii = item.ii; 
     return *this; // Line 2 
    } 
}; 

を、私でした。オーバーロードされた割り当て内のコードをどのように「見る」ことができますか?たとえば、複雑なコードがあり、デバッグしたいと思いますか?私は1行目にブレークポイントを設定しようとしましたが、プログラムはそのブレークポイントにジャンプしませんでした。

なぜLine 2*thisを返しますか?私はvoidに変更しようとしており、同じ結果を得ました。違いは何ですか?

答えて

5

s1を初期化していますが、割り当てていません。

Sales_item s1 = s; 

は、コンパイラが生成コピーコンストラクタを呼び出します。あなたは必要

Sales_item s1(s); 

:それは同等です

Sales_item s1; 
s1 = s; 

なぜLine 2戻り*this? - それは代入演算子を実装する慣習的な方法であり、それに固執することをお勧めします。メソッドと操作の連鎖を容易にします。

1

質問2について:s1 = s2 = s3 = ...

のような連鎖割り当てを有効にするには*これを返します。
関連する問題