프로그래밍 언어/C++

C ++에서 가상 기본 클래스 란?

Rateye 2021. 7. 7. 10:26
728x90
반응형

 

질문 : C ++에서 가상 기본 클래스 란 무엇입니까?

"가상 기본 클래스 "가 무엇이며 그 의미를 알고 싶습니다.

예를 하나 보여 드리겠습니다.

class Foo
{
public:
    void DoSomething() { /* ... */ }
};

class Bar : public virtual Foo
{
public:
    void DoSpecific() { /* ... */ }
};
답변

가상 상속에 사용되는 가상 기본 클래스는 다중 상속을 사용할 때 지정된 클래스의 여러 "인스턴스"가 상속 계층에 나타나는 것을 방지하는 방법입니다.

다음 시나리오를 고려하십시오.

class A { public: void Foo() {} };
class B : public A {};
class C : public A {};
class D : public B, public C {};

위의 클래스 계층 구조는 다음과 같은 "두려운 다이아몬드"를 생성합니다.

  A
 / \
B   C
 \ /
  D

D의 인스턴스는 A를 포함하는 B와 A도 포함하는 C로 구성됩니다. 따라서 A에 대한 두 개의 "인스턴스"(더 나은 표현을 원하는 경우)가 있습니다.

이 시나리오가있을 때 모호 할 가능성이 있습니다. 이렇게하면 어떻게 되나요?

D d;
d.Foo(); // is this B's Foo() or C's Foo() ??

이 문제를 해결하기 위해 가상 상속이 있습니다. 클래스를 상속 할 때 virtual을 지정하면 단일 인스턴스 만 원한다고 컴파일러에 알리는 것입니다.

class A { public: void Foo() {} };
class B : public virtual A {};
class C : public virtual A {};
class D : public B, public C {};

이는 계층 구조에 포함 된 A의 "인스턴스"가 하나뿐임을 의미합니다. 그 후

D d;
d.Foo(); // no longer ambiguous

이것은 간단한 요약입니다. 자세한 내용은 thisthis를 읽어보십시오. 여기 에서도 좋은 예를 볼 수 있습니다.

출처 : https://stackoverflow.com/questions/21558/in-c-what-is-a-virtual-base-class
728x90
반응형