2012-04-09 19 views
2

私はクラスSimpleCircleを持っています。私が使用して定義にC++でオブジェクトのコピーを作成する

class SimpleCircle 
{ 
    public: 
SimpleCircle(); 
SimpleCircle(int rad); 
SimpleCircle(const SimpleCircle&); 
~SimpleCircle(); 

    SimpleCircle operator++(int); 
} 

SimpleCircle SimpleCircle::operator++(int) 
{ 
    SimpleCircle temp(*this); 
    ++itsRadius; 
    return temp; 
} 

私は

SimpleCircleの一時(*本)

を使用していたときに、次のようにその宣言がありますコピーコンストラクタが呼び出されているか、または何ですか?そこには何が起こっていますか?私は

SimpleCircle(SimpleCircle newCircle)

または(コピーコンストラクタ以外)何か

+2

はい、コピーコンストラクタを呼び出しています。 – modelnine

+1

'SimpleCircle(const SimpleCircle&);'はコピーコンストラクタであり、呼び出されるコンストラクタです。 –

+0

デバッガでプログラムの動作を判断できます。 –

答えて

8

これが実際にコピーコンストラクタを呼び出してんのような任意のコンストラクタを持っていません。 SimpleCircle(SimpleCircle other)コンストラクタが定義されていない間は、SimpleCircle(const SimpleCircle&)が定義されています。式*thisは、そのコンストラクタに簡単にマップできるため、ここで実行されているものです。

0

確かにコピーコンストラクタがあります:それはSimpleCircle(const SimpleCircle&);です。

引数としてSimpleCircleを受け取ることはできませんが、すべてのコピーコンストラクタに必要な定数参照が必要です。 *this引数は、コピーコンストラクタがtempを作成するために使用する呼び出し元オブジェクトへのポインタを返します。

関連する問題