가상 운영자의 극복<< 수수께끼
가상 << 연산자에 대해 다음 코드를 사용하면 컴파일러 오류가 발생합니다.
<code class="cpp">virtual friend ostream & operator<<(ostream& os,const Advertising& add);</code>
문제의 근본
정의된 연산자<< 무료 기능으로, 수신자 객체가 없기 때문에 가상 자격을 비활성화합니다. 원하는 가상 기능을 구현하려면 연산자를 클래스 멤버로 정의해야 합니다.
직접 정의의 문제
연산자 정의<< 반원으로서 다른 문제를 제기합니다. 피연산자가 반전되어 객체를 출력하려고 할 때 문제가 발생합니다.
<code class="cpp">MyClass myObject; myObject << cout; // Legal but not our intended usage</code>
해결책: 간접 접근 방식
이러한 과제를 탐색하려면 추가 가상 접근 방식을 도입하세요. 함수:
<code class="cpp">class MyClass { public: virtual void print(ostream& where) const; };</code>
그런 다음 연산자를 재정의합니다.<< 새로운 가상 기능을 활용하여 무료 기능으로:
<code class="cpp">ostream& operator<< (ostream& out, const MyClass& mc) { mc.print(out); return out; }</code>
이 설정을 통해 운영자는<< print() 함수를 통해 서브클래스의 출력 동작을 사용자 정의하는 동시에 올바른 매개변수 순서를 유지하는 자유 함수입니다.
위 내용은 가상 연산자를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!