[c++] C ++에서 Private 또는 Protected 상속이 필요한 이유는 무엇입니까?


Answers

비공개는 여러 상황에서 유용 할 수 있습니다. 정책 중 하나만 있습니다.

부분 클래스 템플릿 전문화가이 디자인 문제에 대한 해답입니까? .

또 다른 유용한 방법은 복사 및 할당을 금지하는 것입니다.

struct noncopyable {
    private:
    noncopyable(noncopyable const&);
    noncopyable & operator=(noncopyable const&);
};

class my_noncopyable_type : noncopyable {
    // ...
};

우리는 객체에 noncopyable* 타입의 포인터를 갖고 싶지 않기 때문에 우리는 개인적으로 파생됩니다. 이는 복사 할 수없는 것뿐만 아니라 다른 많은 클래스에도 중요합니다 (정책이 가장 일반적 임).

Question

C ++에서는 기본 클래스에서 private / protected를 상속 받고 싶은 경우를 생각할 수 없습니다.

class Base;
class Derived1 : private Base;
class Derived2 : protected Base;

정말 유용한가요?




나는 어느 곳에서나 개인이나 보호받는 상속을 모두 사용했다.

개인 상속은 기본 클래스의 동작을 갖고 그 기능을 재정의 할 수 있지만 전 세계가이를 인식하고 사용하기를 바라지 않을 때 유용합니다. 함수가 해당 인터페이스를 반환하도록함으로써 개인적으로 파생 된 클래스의 인터페이스를 계속 사용할 수 있습니다. 개인 인터페이스를 사용하여 스스로 등록 할 수 있기 때문에 콜백을 수신 대기하도록 등록 할 수있는 경우에도 유용합니다.

보호 상속은 다른 클래스에서 유용한 기능을 파생하지만 기본 클래스를 사용하여 파생 클래스 만 사용할 수있게하려는 경우에 특히 유용합니다.




예를 들어, 구현을 재사용하고 클래스의 인터페이스를 사용하지 않고 가상 함수를 재정의하려는 경우.




Links