Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 가상 기본 클래스(Virtual Base Class) 개념과 활용법

이번 튜토리얼에서는 C++의 가상 기본 클래스(Virtual Base Class)가 무엇인지, 그리고 어떤 상황에서 사용되는지 예제 코드와 함께 자세히 알아보겠습니다.

가상 기본 클래스란?

가상 기본 클래스는 주로 다중 상속(Multiple Inheritance) 상황에서 사용됩니다. 여러 클래스가 동일한 기본 클래스를 상속할 때, 파생 클래스에 같은 기본 클래스의 인스턴스가 중복으로 포함되어 모호성(ambiguity) 문제가 발생할 수 있습니다.

이를 흔히 다이아몬드 상속 문제(Diamond Problem)라고 부르는데, 가상 상속(virtual inheritance)을 사용하면 공통 조상 클래스의 인스턴스가 단 하나만 생성되어 이러한 문제를 깔끔하게 해결할 수 있습니다.

예제 코드

#include <iostream>
using namespace std;

class A {
    public:
    int a;
    A(){
        a = 10;
    }
};

class B : public virtual A {
};

class C : public virtual A {
};

class D : public B, public C {
};

int main(){
    // D 클래스 객체 생성
    D object;
    cout << "a = " << object.a << endl;
    return 0;
}

실행 결과

a = 10

코드 설명

위 예제에서 클래스 BC는 각각 virtual 키워드를 사용해 클래스 A를 상속합니다. 그리고 클래스 DBC를 동시에 상속받습니다.

만약 virtual 키워드 없이 일반 상속을 했다면, D 객체 내부에 A의 복사본이 두 개 존재하게 되어 object.a에 접근할 때 컴파일 오류(모호성 에러)가 발생했을 것입니다.

하지만 가상 상속을 적용하면 A의 인스턴스는 메모리에 단 하나만 생성되므로, D 객체에서도 멤버 변수 a에 아무런 충돌 없이 정상적으로 접근할 수 있습니다.

정리

  • 가상 기본 클래스는 다중 상속 시 발생하는 모호성 문제를 방지합니다.
  • virtual 키워드를 상속 선언에 추가하면 공통 조상 클래스의 인스턴스가 하나만 유지됩니다.
  • 다이아몬드 구조의 상속 계층에서 특히 유용하게 사용됩니다.