> 백엔드 개발 > C++ > C에서 사전 및 사후 증분 모두에 대해 연산자를 성공적으로 오버로드하는 방법은 무엇입니까?

C에서 사전 및 사후 증분 모두에 대해 연산자를 성공적으로 오버로드하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-10-30 09:07:02
원래의
486명이 탐색했습니다.

How to Successfully Overload the    Operator for both Pre and Post Increment in C  ?

사전 및 사후 증분에 대한 오버로딩: 모호함 공개

C 영역에서 프로그래머는 사용자 정의를 위해 연산자를 오버로드해야 하는 경우가 종종 있습니다. 수업. 일반적인 문제 중 하나는 사전 증가 및 사후 증가 작업 모두에 대해 연산자를 오버로드하는 것입니다.

딜레마

처음에 사전 및 사후 증가 작업 모두에 대해 연산자 오버로드 간단한 작업인 것 같습니다. 그러나 근본적인 모호성이 있습니다. 연산자는 객체에 대한 참조(접두사) 또는 증가 전 값(후위)을 반환할 수 있으며 결과는 다음과 같습니다.

<code class="cpp">class CSample {
public:
  int m_iValue;
  // Pre-Increment
  int /*CSample& */ operator++();
  // Post-Increment
  // int operator++();
};</code>
로그인 후 복사

단지 다른 반환 유형으로 오버로드될 뿐입니다. , 위의 예에서와 같이 모호성을 해결하지 못합니다.

해결책

이 딜레마에 대한 해결책은 postfix 버전에 더미 int 매개 변수를 도입하는 데 있습니다. 두 가지 증분 연산을 구별할 수 있습니다.

<code class="cpp">// Pre-Increment
CSample& operator++();

// Post-Increment
CSample operator++(int);</code>
로그인 후 복사

이 접근 방식은 모호성을 제거하고 이제 사전 및 사후 증분 모두에 대해 올바르게 오버로드될 수 있습니다.

연산자의 후위 버전 더미 int 매개변수를 취하고 증가하기 전에 객체의 복사본을 반환합니다. 그런 다음 사전 증가 연산자를 사용하여 객체가 증가합니다.

사용

이러한 오버로드가 정의되면 이제 사전 및 사후 증가에 모두 사용할 수 있습니다.

<code class="cpp">CSample obj;
obj++; // Pre-Increment
++obj; // Post-Increment</code>
로그인 후 복사

결론

사전 및 사후 증가 모두에 대해 연산자를 오버로드하려면 신중한 고려와 관련된 모호성에 대한 명확한 이해가 필요합니다. 두 작업을 구별하기 위해 더미 매개변수를 활용함으로써 사용자 정의 클래스에 대한 두 동작을 모두 성공적으로 구현할 수 있습니다.

위 내용은 C에서 사전 및 사후 증분 모두에 대해 연산자를 성공적으로 오버로드하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿