[c++] 구조체와 클래스의 가상 상속

가상 상속은 C++에서 다중 상속 시 발생하는 다이아몬드 문제(다이아몬드 상속 문제)를 해결하기 위한 기법입니다. C++에서는 구조체클래스 간에도 가상 상속을 허용합니다.

구조체(struct)와 클래스(class)

C++에서 구조체와 클래스의 차이는 기본적으로 접근 지정자의 기본값이 다르다는 것입니다. 클래스는 기본적으로 private으로, 구조체는 기본적으로 public으로 지정됩니다.

struct Person {
  string name;
  int age;
};

class Student {
  string name;
  int age;
public:
  void display();
};

가상 상속

가상 상속은 다중 상속 시 발생하는 다이아몬드 문제를 해결하는 기법 중 하나입니다. 가상 상속을 사용하면 가상 기본 클래스의 서브클래스가 가상 상속되는 클래스들로부터 가상 상속 받을 수 있습니다.

가상 상속을 적용하기 위해서는 가상 상속 지정자를 사용합니다.

class A {
  ...
};

class B : virtual public A {
  ...
};

class C : virtual public A {
  ...
};

class D : public B, public C {
  ...
};

위의 예시에서 class Bclass C에 가상 상속 지정자를 설정하여 class D에서 class A를 가상 상속받을 수 있도록 합니다.

결론

C++에서 구조체와 클래스 사이의 가상 상속은 다중 상속 시 발생할 수 있는 문제를 방지할 수 있는 중요한 기법입니다. 다중 상속을 사용할 때는 가상 상속에 대해 신중하게 고려해야 합니다.

References