> 백엔드 개발 > C++ > 연산자 오버로딩: 멤버 함수와 친구 함수 – 언제 어느 것을 선택해야 합니까?

연산자 오버로딩: 멤버 함수와 친구 함수 – 언제 어느 것을 선택해야 합니까?

Linda Hamilton
풀어 주다: 2024-12-18 02:39:10
원래의
411명이 탐색했습니다.

Operator Overloading: Member Functions vs. Friend Functions – When Should You Choose Which?

연산자 오버로딩: 멤버 함수를 사용하는 경우와 비멤버 함수를 사용하는 경우

연산자 오버로딩에서는 연산자가 다음과 같이 선언될 때 비대칭성이 발생합니다. 단일 매개 변수가 필요하고 암시적으로 this 포인터를 다른 피연산자로 전달하는 멤버 함수입니다. 이러한 비대칭성은 오버로드된 연산자 간의 비교를 제한합니다. 반대로, friend 함수는 동일한 유형의 두 인수를 전달하여 비교를 가능하게 함으로써 대칭 오버로딩을 허용합니다.

그런데 포인터 lvalue를 참조와 비교할 수 있음에도 불구하고 friend 함수가 선호되는 이유는 무엇입니까?

첫째, 첫 번째 피연산자가 클래스 유형이 아닐 때 멤버 함수 오버로드는 순서 문제에 직면합니다. 예를 들어 10.0 s2와 같은 표현식은 멤버 함수 오버로딩을 사용하면 유효하지 않습니다.

이를 해결하기 위해 비공개 멤버에 액세스하거나 순서 문제가 발생할 때 비멤버 친구 함수를 사용할 수 있습니다. 오버로드된 함수를 클래스의 친구로 만들면 전용 멤버에 액세스할 수 있어 연산자 오버로드에 유연성이 허용됩니다. 그러나 비공개 멤버 액세스가 필요하지 않은 한 캡슐화를 강화하기 위해 non-friend 비멤버 함수를 사용하는 것이 좋습니다.

요약하자면, friend 함수는 대칭성을 제공하고 연산자 오버로드의 순서 문제를 해결합니다. 비회원 비회원 함수는 캡슐화를 유지하면서 개인 멤버에 대한 액세스를 가능하게 하여 더 많은 유연성을 제공합니다. STL 알고리즘은 복잡한 순서를 피하고 연산자 사용의 일관성을 유지하기 위해 대칭 버전을 사용합니다.

위 내용은 연산자 오버로딩: 멤버 함수와 친구 함수 – 언제 어느 것을 선택해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿