2017-12-12 3 views
-7

私はこのクラスを持っています。++ cを作成すると何が起こるのか理解できません。そして、これは何を返すのでしょうか?私の英語には申し訳ありません。プリインクリメント操作中にオブジェクトにはどうなりますか?

class Cls{ 

int i; 
public: 
    Cls(int i=8):i(i){cout<<'A';} 
    Cls(const Cls &t):i(t.i){cout<<'B';} 
    ~Cls(){cout<<'C';} 
    void af(){cout<<i;} 
    Cls operator+(Cls &t){return Cls(i+t.i);} 
    Cls operator++(){i++; return *this;} 
    Cls& operator--(){--i; return *this;} 
    operator int(){cout<<'D'; return i;} 

    }; 

    int main(){ 

     Cls c; cout <<","; //Here the constructor will print A 
     ++c; cout <<","; // here? 
     c.af(); cout <<","; //This will print 9 

      //Then the destructor will print C. 
     return 0; 
    } 

実際の出力は次のようになります。

A,BC,9,C 

私はそれを印刷する必要があることを期待:

A,,9,C 

BCが印刷されているのはなぜ?

+1

あなたの名前の選択は、質問を少し混乱させます。私はまず、C++オブジェクトが作成されたときに何が起こるかを尋ねていると思っていました。 –

+0

'this 'は「thisポインタ」として知られています。 – Yashas

+0

++ cは作成済みですか? –

答えて

1

プリインクリメント演算子メソッドは、の新しいオブジェクトを返します。それはコンストラクタを呼び出し、すぐ後でデストラクタを呼び出します。また、あなたは最適化レベルを上げる場合は、簡単にすることができますし、「BC」を使用して、コンパイラと消える可能性があることに注意すべきである

Cls& operator++(){i++; return *this;} 
    ^^^ To return the object by reference (and thus avoid construction/destruction). 

:としてあなたが正常にこのことを書くでしょう

Cls operator++(){i++; return *this;} 
^^^ return by value. 
    Means you need to be able to copy construct "Cls" 

注意コピー操作を最適化として「削除」します。

関連する問題