2011-04-26 3 views

답변

3

마지막 함수는 오버로드 된 연산자입니다. 특히 접두사 증가 연산자. 이 클래스를 사용하면 해당 클래스의 객체에 접두사 ++ 연산자를 사용할 수 있습니다. 예를 들어

Counter counter; 
    ++counter; 
    // note this is not implemented 
    counter++; 

이 줄

Counter(++count) 

먼저 현재 인스턴스 생성자

Counter(int c) 

프리픽스 증가의 결과를 이용하여 다음 계수 증가시켜 새로운 카운터 객체를 생성, 따라서, 다른 인스턴스 (증가 된 사본)는 어떤 접두어 증가가 호출되었는지를 나타냅니다.

6

나는 당신이 당신의 클래스에 대한 operator++를 구현하고 싶었 생각하고, 그 같이 구현해야합니다

Counter & operator++() 
{ 
    ++count; 
    return *this; 
} 

지금 문제는 그것이 무엇을합니까입니까? 사전 증분을 수행합니다. 지금 당신은 ++counter을 쓸 수와 그 위의 연산자 오버로드를 호출하고, 어떤 내부적 1.

예에 의해 변수 count을 증가시킬 것이다 :

Counter counter(1); 
++counter; 
std::cout << counter.get_count() << std::endl; 
++(++counter); 
std::cout << counter.get_count() << std::endl; 

출력 :

2 
4 

무엇 당신의 원래 코드는 무엇입니까?

당신이 operator++의 원래 구현을 사용하여 위의 코드를 실행하려고하면 다음과 같은 출력합니다 :

당신이 반환하고 다른 임시 객체를 생성하고 있기 때문에입니다
2 
3 

,을하는 ++(++counter)을 쓸 때 외부 사전 증가는 임시 값을 증가시킵니다. 따라서 외부 사전 확장은 counter.count의 값을 변경하지 않습니다.

++(++(++(++counter)))을 쓰더라도 그 값은 ++counter과 같습니다.

여기에 출력을 비교 :

++(++counter)does NOT invoke undefined behavior.

관련 문제