공개 및 개인 상속에 대해서는 분명하지만 보호되는 것은 무엇입니까? 우리가 실제로 그것을 사용해야 할 때 어떤 예가 우리에게 유익합니까?어떤 경우에 보호 된 상속이 필요합니까?
답변
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_base
는 foo
전에 구성되며, foo::foo
에 전달 된 ostream
유효합니다. 당신이 bar
의 보호 회원으로 file
을 원하는 경우에, 당신이 보호 상속을 사용해야합니다
struct bar : protected bar_base, public foo { ... }
protected
은 멤버 변수가 하위 클래스에서는 액세스 할 수 있지만 외부에서는 액세스 할 수 없다는 것을 의미합니다.
아주 간단한 예제는 내부 계산을 수행하기 위해 변수 (예 : x
)를 사용하는 클래스가 될 수 있습니다. 서브 클래스가 같은 계산을 실시 할 필요가있는 경우는, 아마 x
에 액세스 할 필요가 있습니다. 비공개로 만들면 하위 클래스가 액세스하지 못하게되어 모든 사용자가 액세스 할 수있게됩니다. 보호는 절충안과 같습니다.
질문은 보호 상속에 대한 것입니다. 'class a : protected b ', 보호 된 회원에 관한 것이 아닙니다. –
보호 된 상속은 나를 의미하는이 일을 의미합니다.
이것은 보호 된 상속에 대한 Scott Meyers의 의견 (Effective C++, 3rd Edition)입니다.
그러나이 페이지는 재미 있습니다 : Effective C++: discouraging protected inheritance?.
보호는 특히 어린이를 염두에두고 작성된 수퍼 클래스를 추상화하는 데 특히 유용합니다. 보호 된 멤버 및 메서드는 자식에게 제공되며 해당 시점에 구현되는 클래스 패밀리 외부의 세계에 코드 복제본을 노출시키지 않고 코드 복제를 저장할 수 있습니다.
질문은 보호 된 멤버가 아닌'class a : protected b'라는 상속에 관한 것입니다. –
- 1. 어떤 경우에 필요한 이벤트 분리가 필요합니까?
- 2. node.js에는 상속이 필요합니까?
- 3. HeapCreate 함수가 사용되거나 어떤 경우에 많은 힙이 필요합니까?
- 4. git merge 대신 어떤 경우에 git cherry-pick이 필요합니까?
- 5. alloca()는 어떤 경우에 유용합니까?
- 6. Silverlight.js 파일을 어떤 경우에 참조해야합니까?
- 7. 어떤 경우에 인감 클래스를 사용해야합니까?
- 8. 이 알고리즘은 어떤 경우에 실패합니까?
- 9. C# : 어떤 경우에 참조를 무시해야합니까?
- 10. 어떤 경우에 bind()를 호출해야합니까?
- 11. 어떤 경우에 TCP 연결을 닫아야합니까?
- 12. 어떤 경우에 메모리 누수가 발생합니까?
- 13. 고정 된 오른쪽 패널에는 어떤 CSS가 필요합니까?
- 14. 어떤 문맥이 필요합니까?
- 15. 어떤 칼만 필터가 필요합니까?
- 16. 어떤 쿼리 세트가 필요합니까?
- 17. 어떤 SSL 인증서가 필요합니까?
- 18. 상속이 나 빠졌습니까?
- 19. 어떤 doctype이 필요합니까?
- 20. JUNG : 어떤 라이브러리가 필요합니까?
- 21. 어떤 정규식이 필요합니까?
- 22. MVC4에는 어떤 어셈블리가 필요합니까?
- 23. 어떤 단위 범위가 필요합니까?
- 24. 어떤 Crystal 버전이 필요합니까?
- 25. 어떤 유형의 가입이 필요합니까?
- 26. 어떤 Visual C++ DLL이 필요합니까?
- 27. 어떤 경우에 utf8 croak를 인 코드/디코드합니까?
- 28. 는 어떤 경우에 재 htaccess로 단지
- 29. Lisp에서 어떤 경우에 # '를 써야하는 이유는 무엇입니까?
- 30. 자바 제네릭. 내 경우에 어떤 이점이 있습니까?
'giveы' : 안녕하세요 러시아 : – iehrlich
관련에서 [보호 된 상속] (HTTP : // 유래 .com/questions/2090661/protected-inheritance) – ipc
C++의 모든 부분이 유용하지는 않습니다. 보호 된 상속과 같은 기능을 정의하는 것은 자연 스럽다. 왜냐하면 일반적인 체계에 깔끔하게 들어 맞지 만 그렇게 넓게 (또는 전혀) 유용하지는 않기 때문이다. 명시 적으로 설계된 것조차도 'valarray', 'export','vector '또는 예외 사양처럼 유용하지 않게되었습니다. –