문제

비공개 상속이 필요한 드문 경우를 보았지만 보호 상속이 필요한 경우는 본 적이 없습니다.누군가 예가 있습니까?

도움이 되었습니까?

해결책

여기 사람들은 Protected 클래스 상속과 Protected 메서드를 잘못 알고있는 것 같습니다.

FWIW, 저는 보호 된 클래스 상속을 사용하는 사람을 본 적이 없습니다. 정확하게 기억한다면 Stroustrup은 심지어 C ++에서 "보호 된"수준을 실수로 간주했다고 생각합니다.해당 보호 수준을 제거하고 공개 및 비공개에만 의존하면 할 수없는 귀중한 일이 거의 없습니다.

다른 팁

보호 된 상속의 매우 드문 사용 사례가 있습니다. 공분산 을 사용하려는 위치입니다.

라코 디스

이전 스 니펫은 기본 클래스를 숨기고 "getBase"함수를 제공하여 어떤 이유로 든 기본 클래스와 해당 함수에 대한 제어 된 가시성을 제공하려고했습니다.

그러나 d2d2d1에서 파생 된 것을 알지 못하기 때문에 struct base에서는 실패합니다. 따라서 covariance가 작동하지 않습니다. 이를 해결하는 방법은 상속을 d2에서 볼 수 있도록 보호를 유도하는 것입니다.

이를 사용하는 유사한 예는 std::ostream에서 파생되지만 임의의 사람들이 스트림에 쓰기를 원하지 않는 경우입니다. getStream를 반환하는 가상 std::ostream& 함수를 제공 할 수 있습니다. 이 함수는 다음 작업을 위해 스트림을 준비 할 수 있습니다. 예를 들어 특정 조작자를 넣습니다. 라코 디스

C ++ FAQ Lite 는 개인 상속을 사용하는 것이 합법적 인 경우를 언급합니다. 솔루션 ( [24.3.] 참조) 어느 것을 선호해야합니까? 구성 또는 개인 상속? ). 가상 함수 (이 경우 derivedFunction())를 통해 전용 기본 클래스 내에서 파생 클래스를 호출하려는 경우입니다. 라코 디스

이제 Derived 클래스에서 파생하고 파생 클래스 내에서 Base::service()를 사용하려는 경우 (예 : Derived::someFunction()를 파생 클래스로 이동하려는 경우)이를 수행하는 가장 쉬운 방법은 private 상속을 변경하는 것입니다. 보호 된 상속에 대한 Base의.

죄송합니다. 더 구체적인 예는 생각할 수 없습니다. 개인적으로 저는 "상속 관계를 보호해야하는지 아니면 비공개로해야하는지"논의하는 데 시간을 낭비하지 않기 위해 모든 상속을 공개하는 것을 좋아합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top