2010-07-23 6 views
2

및 기초 안에 내가 친구 기능이 파생파생 클래스는 기본 클래스의 friend 함수를 사용할 수 있습니까? 내가 몇 가지 클래스 근거가있는 경우는 유래에서

friend int operator!=(const Basis&, const Basis&) 
내가

내 주요 내부에있는 경우에 나는 그런 기능 이없는

내부 파생 클래스 그래서 제 질문은

If(derived1 != derived2) ... 

왜 작동합니까? 캐스팅을위한 생성자가 없습니다! = 사전에 감사합니다. 을 쓰는 경우 (파생 된! = basis) 작동합니까?

답변

2

컴파일러는 이들을 Basis 클래스의 개체로 비교합니다. 파생 클래스에서 기본 클래스로 암시 적으로 변환 할 수 있으므로 컴파일러에서 Basisoperator !=의 오버로드로 전달할 수 있습니다. 물론이 비교는 Basis에 선언 된 필드 만 사용할 수 있습니다. 따라서 Derived의 멤버를 사용하여보다 구체적인 비교를 수행하려면 별도의 operator != 오버로드를 정의해야합니다.

우정 선언은 operator !=을 호출 할 때 관련이 없습니다. 모두 operator !=Basis에 선언 된 비공개 멤버에 액세스 할 수 있습니다.

+0

만약 내가 작성한다면 (derived! = basis) 작동합니까? – Chan

+0

@Chan, 예,'Basis' 유형의 오브젝트 또는 파생 클래스의 조합은'operator! ='overload와 비교할 수 있습니다. 과부하는'Basis'에서 상속받은 부분 만 사용합니다. 이것은 기본 객체 지향 (OO)의 결과입니다. 상속 관계입니다. (http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)) –

+0

최고 감사합니다. – Chan

0

Basis 부분을 비교하는 친구 기능인 것 같습니다. Derived입니다. 따라서 유행에 따라 작동하지만 Derived의 데이터는 무시합니다.

0

Derived 클래스는 Basis 클래스에있는 모든 항목을 상속하므로 (이 경우에는! =에 대한 연산자 오버로드 임) 파생 개체 (derived1 및 derived2)에도 정의되어 있습니다.

관련 문제