>백엔드 개발 >C++ >어떻게 하면 오버로드할 수 있나요?

어떻게 하면 오버로드할 수 있나요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-14 02:01:10258검색

How Can I Overload the

연산자 재정의<< 향상된 스트림 조작을 위한

이 논의는 연산자 과부하 문제에 중점을 두고 있습니다<< std::endl의 기능을 통합합니다.

문제:

연산자를 오버로드할 때<<, my_stream과 같은 iostream은 기본 유형 및 문자열을 쉽게 출력할 수 있습니다. my_stream을 통해 << 10 << "heads", my_stream <<를 사용하여 std::endl 출력을 시도합니다. 끝; 컴파일 오류가 발생합니다.

해결책: 함수 포인터 이해

이 문제를 해결하는 열쇠는 std::endl이 함수라는 것을 인식하는 데 있습니다. std::cout 스트림은 연산자<< std::endl과 동일한 서명을 가진 함수 포인터를 허용합니다. 이 함수는 이후에 호출되고 해당 반환 값이 전달됩니다.

MyStream에 대한 엔드라인 조작 사용자 정의

my_stream에 대해 유사한 기능을 달성하려면 특수한 endl 함수를 정의할 수 있습니다. 다음 서명이 포함되어 있습니다:

typedef MyStream&amp; endl(MyStream&amp; stream)

이 기능 내에서 다음 작업에 필요한 추가 작업이나 수정을 수행할 수 있습니다. 특정 스트림 구현을 통해 std::endl이 사용될 때 의도한 대로 작동하는지 확인합니다.

오버로딩 연산자<< std::endl을 허용하려면

my_stream이 std::endl도 허용하도록 하려면 다른 연산자를 선언하세요<< 다음 서명을 사용합니다.

typedef std::basic_ostream > CoutType;
typedef CoutType& (*StandardEndLine)(CoutType&);

MyStream& operator<<(StandardEndLine manip)

이 연산자는 표준 출력 스트림에서 std::endl을 호출하여 std::cout의 동작을 모방하면서 my_stream의 사용자 정의 endl 구현과 호환됩니다.

위 내용은 어떻게 하면 오버로드할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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