반응형
가상 상속
이 질문에 이미 답변이 있습니다.
- C ++에서 가상 기본 클래스 란 무엇입니까? 10 개의 답변
"가상"상속의 의미는 무엇입니까?
다음 코드를 보았고 virtual
다음 컨텍스트에서 키워드의 의미를 이해하지 못했습니다 .
class A {};
class B : public virtual A;
가상 상속은 DDD 문제 (Dreadful Diamond on Derivation)를 해결하는 데 사용됩니다.
동일한 기본 클래스에서 상속하는 두 개의 클래스가있는 다음 예제를보십시오.
class Base
{
public:
virtual void Ambig();
};
class C : public Base
{
public:
//...
};
class D : public Base
{
public:
//...
};
이제 C 및 D 클래스 (둘 다 Base :: Ambig () 함수를 상속)에서 상속하는 새 클래스를 작성하려고합니다.
class Wrong : public C, public D
{
public:
...
};
위의 "잘못된"클래스를 정의하는 동안 실제로 다음을 호출 할 수 없기 때문에 DDD (Diamond Derivation 문제)를 생성했습니다.
Wrong wrong;
wrong.Ambig();
이것은 두 번 정의되기 때문에 모호한 함수입니다.
Wrong::C::Base::Ambig()
과:
Wrong::D::Base::Ambig()
이러한 종류의 문제를 방지하려면 올바른 Ambig()
기능 을 참조하는 가상 상속을 사용해야합니다 .
그래서 정의 :
class C : public virtual Base
class D : public virtual Base
class Right : public C, public D
참조 URL : https://stackoverflow.com/questions/419943/virtual-inheritance
반응형
'Program Tip' 카테고리의 다른 글
Rails 3에서 리소스 생성 작업이 실패하고 render : new를 호출 할 때 URL이 리소스의 인덱스 URL로 변경되어야하는 이유는 무엇입니까? (0) | 2020.12.27 |
---|---|
“brew link”는 무엇을합니까? (0) | 2020.12.27 |
C / C ++로 DLL을 컴파일 한 다음 다른 프로그램에서 호출 (0) | 2020.12.27 |
Android NDK 및 STLport에서 boost 라이브러리 (shared_ptr 포함)를 사용하는 방법 (0) | 2020.12.27 |
요청 받기가 액세스 제어 검사를 통과하지 못함 : 요청 된 리소스에 'Access-Control-Allow-Origin'헤더가 없습니다. (0) | 2020.12.27 |