>백엔드 개발 >C++ >오버로드하는 방법

오버로드하는 방법

Linda Hamilton
Linda Hamilton원래의
2024-12-08 05:54:10169검색

How to Overload the

오버로딩 연산자<< std::endl

스트림 삽입 연산자(operator<<)를 오버로드할 때 std::endl을 삽입 인수로 포함하려고 하면 일반적인 문제가 발생합니다. 오류 "오류 C2678: 이진 '<<' : 연산자를 찾을 수 없습니다."는 시스템이 왼쪽 피연산자 UIStream에 대해 호환되는 연산자를 찾을 수 없음을 나타냅니다.

이 오류의 근본적인 이유는 std::endl이 유형이 아니라 함수이기 때문입니다. 이를 극복하려면 std::cout이 std::endl을 처리하는 방법을 이해해야 합니다. std::cout은 연산자<<를 구현합니다. std::endl과 동일한 서명을 가진 함수 포인터를 사용합니다. 그런 다음 함수를 호출하고 반환 값을 전달합니다.

이 동작을 에뮬레이트하기 위해 추가 연산자<< 사용자 정의 MyStreamManipulator 서명이 있는 함수를 취하는 MyStream 클래스의 함수입니다. 이 함수는 지정된 함수를 호출하고 반환 값을 반환합니다.

std::endl을 구체적으로 처리하기 위해 MyStreamManipulator 서명과 일치하는 정적 MyStream::endl 함수를 정의합니다. 이 함수 내에서 새 줄을 인쇄하고 버퍼 플러시와 같은 추가 스트림 작업을 수행합니다.

또한 연산자<< std::cout에서 사용하는 StandardEndLine 함수 서명을 허용하는 함수입니다. 이 함수는 std::cout을 인수로 사용하여 std::endl을 삽입할 수 있는 manip 함수를 호출합니다.

이 단계를 수행하면 연산자<< 사용자 정의 데이터와 std::endl 삽입을 모두 처리하기 위해 사용자 정의 MyStream 클래스에 있습니다. 이를 통해 스트림 조작을 완벽하게 제어할 수 있는 std::cout의 다양한 대안으로 MyStream을 사용할 수 있습니다.

위 내용은 오버로드하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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