가상 사업자 구현<<
가상 사업자의 필요성<< 다양한 클래스에 대한 스트리밍 연산자의 동작을 사용자 정의할 때 발생합니다. 연산자를 가상으로 정의하려고 시도하면 "연산자 <<: 멤버 함수와 베이스만 가상일 수 있습니다."라는 오류가 발생하는 경우가 많습니다.
자유 함수의 딜레마
이 문제는 운영자<< 일반적으로 수신자 객체가 없고 가상일 수 없는 자유 함수로 정의됩니다. 반면에 연산자를 멤버 함수로 정의하면 매개변수 순서가 바뀌어 컴파일 오류가 발생합니다.
간접 참조를 통한 솔루션
이 딜레마를 해결하려면, 원하는 출력 동작을 캡슐화하는 가상 멤버 함수 추가를 고려해보세요.
<code class="cpp">class MyClass { public: virtual void print(ostream& out) const; // Virtual output function };</code>
가상 동작을 사용한 사용자 정의 연산자
가상 멤버 함수를 사용하면 다음을 정의할 수 있습니다. 연산자<< 인쇄 기능에 위임하는 자유 함수:
<code class="cpp">ostream& operator<<(ostream& out, const MyClass& mc) { mc.print(out); // Calls the virtual print function return out; }</code>
이 접근 방식은 연산자에 대한 올바른 매개변수 순서를 유지합니다<< 가상 멤버 함수를 통해 출력 동작을 사용자 정의할 수 있는 동시에 무료 함수입니다. 서브클래스는 인쇄 기능을 재정의하여 자체 사용자 정의 출력 형식을 구현할 수 있습니다.
위 내용은 왜 `연산자를 만들 수 없나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!