2012-03-31 3 views
6

공개 및 개인 상속에 대해서는 분명하지만 보호되는 것은 무엇입니까? 우리가 실제로 그것을 사용해야 할 때 어떤 예가 우리에게 유익합니까?어떤 경우에 보호 된 상속이 필요합니까?

+0

'giveы' : 안녕하세요 러시아 : – iehrlich

+2

관련에서 [보호 된 상속] (HTTP : // 유래 .com/questions/2090661/protected-inheritance) – ipc

+2

C++의 모든 부분이 유용하지는 않습니다. 보호 된 상속과 같은 기능을 정의하는 것은 자연 스럽다. 왜냐하면 일반적인 체계에 깔끔하게 들어 맞지 만 그렇게 넓게 (또는 전혀) 유용하지는 않기 때문이다. 명시 적으로 설계된 것조차도 'valarray', 'export','vector '또는 예외 사양처럼 유용하지 않게되었습니다. –

답변

3

base-from-member 관용구는 때때로 보호 상속을 필요로합니다.

주소를 관용구 문제는 다음입니다 : 가끔 이렇게foo

struct foo 
{ 
    virtual ~foo() {} 

protected: 
    foo(std::ostream& os) 
    { 
     os << "Hello !\n"; 
    } 
}; 

struct bar : foo 
{ 
    bar(const char* filename) 
     : foo(file), file(filename) // Bad, file is used uninitialized 
    {} 

private: 
    std::fstream file; 
}; 

그러나 file건설처럼, 파생 클래스의 멤버와 기본 클래스를 초기화해야하고, ostream은 (는) foo::foo에게 전달되었습니다.

당신은 보조 클래스와 개인 상속이 문제를 해결 :

struct bar_base 
{ 
    std::fstream file; 

protected: 
    bar_base(const char* filename) 
     : file(filename) 
    {} 

    ~bar_base() {} 
}; 

struct bar : private bar_base, public foo 
{ 
    bar(const char* filename) 
     : bar_base(filename), foo(file) 
    {} 
}; 

지금 bar_basefoo 전에 구성되며, foo::foo에 전달 된 ostream 유효합니다.

당신이 bar의 보호 회원으로 file을 원하는 경우에, 당신이 보호 상속을 사용해야합니다

struct bar : protected bar_base, public foo { ... } 
2

protected은 멤버 변수가 하위 클래스에서는 액세스 할 수 있지만 외부에서는 액세스 할 수 없다는 것을 의미합니다.

아주 간단한 예제는 내부 계산을 수행하기 위해 변수 (예 : x)를 사용하는 클래스가 될 수 있습니다. 서브 클래스가 같은 계산을 실시 할 필요가있는 경우는, 아마 x에 액세스 할 필요가 있습니다. 비공개로 만들면 하위 클래스가 액세스하지 못하게되어 모든 사용자가 액세스 할 수있게됩니다. 보호는 절충안과 같습니다.

+2

질문은 보호 상속에 대한 것입니다. 'class a : protected b ', 보호 된 회원에 관한 것이 아닙니다. –

4

보호 된 상속은 나를 의미하는이 일을 의미합니다.

이것은 보호 된 상속에 대한 Scott Meyers의 의견 (Effective C++, 3rd Edition)입니다.

그러나이 페이지는 재미 있습니다 : Effective C++: discouraging protected inheritance?.

0

보호는 특히 어린이를 염두에두고 작성된 수퍼 클래스를 추상화하는 데 특히 유용합니다. 보호 된 멤버 및 메서드는 자식에게 제공되며 해당 시점에 구현되는 클래스 패밀리 외부의 세계에 코드 복제본을 노출시키지 않고 코드 복제를 저장할 수 있습니다.

+2

질문은 보호 된 멤버가 아닌'class a : protected b'라는 상속에 관한 것입니다. –

관련 문제