>  기사  >  백엔드 개발  >  왜 `연산자를 만들 수 없나요?

왜 `연산자를 만들 수 없나요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-26 09:22:29503검색

Why Can't I Make the `operator

가상 사업자 구현<<

가상 사업자의 필요성<< 다양한 클래스에 대한 스트리밍 연산자의 동작을 사용자 정의할 때 발생합니다. 연산자를 가상으로 정의하려고 시도하면 "연산자 <<: 멤버 함수와 베이스만 가상일 수 있습니다."라는 오류가 발생하는 경우가 많습니다.

자유 함수의 딜레마

이 문제는 운영자<< 일반적으로 수신자 객체가 없고 가상일 수 없는 자유 함수로 정의됩니다. 반면에 연산자를 멤버 함수로 정의하면 매개변수 순서가 바뀌어 컴파일 오류가 발생합니다.

간접 참조를 통한 솔루션

이 딜레마를 해결하려면, 원하는 출력 동작을 캡슐화하는 가상 멤버 함수 추가를 고려해보세요.

<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.