2012-05-03 5 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 = ...

과 같은 연결 할당을 사용하려면 * this를 반환합니다.
관련 문제