2016-11-27 14 views
0

オーバーロードされた演算子、特に代入演算子の基本について説明します。私はコピーを口述でのオーバーロードを使用することを理解し、これに従うことによって行動を移動しようとしている:コピー/移動操作のオーバーロードされた代入演算子ですか?

operator overloading

私は、彼らが非常に不明瞭であることを与える例を見つけます。

これは、オーバーロードを説明するためにこれまでに書いた基本コードです。このコードを編集して、コピーや移動の動作をカスタマイズする際の過負荷の使用を例示するにはどうすればよいですか?

class Distance 
{ 
public: 
    int feet, inches; 

    Distance() 
    { 
     feet = 0; 
     inches = 0; 
    } 

    Distance(int f, int i) 
    { 
     feet = f; 
     inches = i; 
    } 

    auto operator=(Distance &D)->void //Use operator to perform additional operation (adding 100) 
    { 
     feet = D.feet + 100; 
     inches = D.inches + 100; 
    } 
}; 

int main() 
{ 
    Distance D1; 
    D1.feet = 10; 
    D1.inches = 12; 
    Distance D2; 
    D2 = D1; 
    std::cout << D2.feet << std::endl; 
} 

答えて

-1

このような代入演算子は使用できません。例えば、いくつの割り当てが行われたかをカウントするために、追加操作を伴う割り当てオペレータを使用することができる。このようにデータを変更すると、インタフェースの使用中に混乱とヒューマンエラーが発生します。あなたはコードが何らかの方法で動作することを期待しています。代入演算子の場合、値をコピーしています。組み込み型がどのように動作し、オーバーロードされた演算子をそのように実装するかだけに従ってください。演算子+()にボリュームを掛けることはありませんか?それは意味をなさないでしょう。

static int assignmentCount = 0; 

auto operator=(Distance &D)->void 
    { 
    feet=D.feet; 
    inches=D.inches; 
    std::cout << "Made assignment"; //Just some debug stuff 
    assignmentCount++;    //Count assignments made 
    } 

することができた、あなたはD1 = D2 = D3を次の操作を行うためにあなたを無効戻り値の型として存在し、ボイド入れていることを、忘れてはいけない:この場合

追加の操作が例えば可能性が

いくつかの場合に有用である。受信値への参照を返すことは一般的な方法です。

私はMarc GregoireまたはStroupstrupの本の1つでProfessional C++を読むことをお勧めします。私の最近の経験では、オンラインの情報源は何らかの混乱を招くことがあり、書籍は一般的に基本を学ぶ上でより優れています。

+1

読んだ後でもまだ不明ですか?それともあなたがどうして心配していますか? – holmicz

+0

理解していない人のために - OPはStroupstrupが代入演算子に関する章を全部持っていることを明示した。 – holmicz

関連する問題