연산자 오버로딩: 멤버 함수 vs. 비멤버 함수
연산자 오버로딩에서는 멤버 함수와 비멤버 함수 중 선택이 혼란을 야기합니다. . 멤버 함수는 비대칭이고 비멤버 함수는 대칭인데 왜 특정 시나리오에서 친구를 선호합니까?
멤버 함수는 호출 개체를 나타내기 위해 this 포인터가 자동으로 전달되므로 하나의 명시적 매개변수만 허용할 수 있습니다. 이러한 비대칭성은 멤버 함수가 왼쪽 피연산자에서 호출되는 상황에 대한 비교를 제한합니다. 그러나 Double을 Sample 개체와 비교하려는 시도와 같이 왼쪽 피연산자가 클래스 유형이 아닌 경우 이 접근 방식은 실패합니다.
이 제한 사항을 해결하기 위해 friend 함수를 사용하여 연산자를 오버로드할 수 있습니다. Friend 함수는 클래스의 전용 멤버에 액세스할 수 있으므로 비대칭 제한 없이 연산자 오버로드를 처리할 수 있습니다. 프렌드 함수가 사용되면 컴파일러는 10.0 s2와 같은 표현식을 연산자 (10.0, s2)로 변환합니다.
STL 알고리즘은 양방향 비교가 가능하고 피연산자에서 명시적인 순서를 지정할 필요가 없기 때문에 대칭 버전을 선호합니다. . 그러나 친구 함수는 비공개 멤버에 대한 액세스를 허용하므로 가능하면 비멤버 함수를 사용하여 캡슐화를 강화해야 합니다.
요약하자면, 멤버 함수는 클래스 인스턴스가 항상 왼쪽 피연산자로 포함되는 연산자에 사용됩니다. , 친구 함수는 클래스 인스턴스가 피연산자일 수 있는 상황을 처리합니다. 유연성과 캡슐화를 높이려면 private 멤버에 액세스하지 않을 때 비멤버 함수를 선호해야 합니다.
위 내용은 회원 대 비회원 연산자 오버로딩: 친구 기능이 선호되는 경우는 언제입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!