사전 및 사후 증분에 대한 오버로딩: 모호함 공개
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!