2012-04-09 2 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을 만들기 위해 사용하는 호출 객체에 대한 포인터를 반환합니다.

관련 문제