Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

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

<시간/>

가상 기본 클래스는 파생 클래스에 기본 클래스의 복사본이 여러 개 있을 때 사용됩니다.

예시 코드

#include <iostream>
using namespace std;
class B {
   public: int b;
};

class D1 : public B {
   public: int d1;
};

class D2 : public B {
   public: int d2;
};

class D3 : public D1, public D2 {
   public: int d3;
};

int main() {
   D3 obj;

   obj.b = 40; //Statement 1, error will occur
   obj.b = 30; //statement 2, error will occur
   obj.d1 = 60;
   obj.d2 = 70;
   obj.d3 = 80;

   cout<< "\n B : "<< obj.b
   cout<< "\n D1 : "<< obj.d1;
   cout<< "\n D2: "<< obj.d2;
   cout<< "\n D3: "<< obj.d3;
}

위의 예에서 D1과 D2는 둘 다 B의 단일 복사본을 상속합니다. 그러나 D3은 D1과 D2를 모두 상속하므로 D3에는 D1과 D2의 두 복사본이 있습니다.

컴파일러가 D3에서 b의 두 복사본을 구별할 수 없기 때문에 위의 예에서 명령문 1과 2는 오류를 생성합니다.

D3에서 B의 여러 복사본을 제거하려면 D1과 D3의 B를 가상 클래스로 상속해야 합니다.

따라서 가상 기본 클래스를 사용하는 위의 예는 -

예시 코드

#include<iostream>
using namespace std;
class B {
   public: int b;
};

class D1 : virtual public B {
   public: int d1;
};

class D2 : virtual public B {
   public: int d2;
};

class D3 : public D1, public D2 {
   public: int d3;
};

int main() {
   D3 obj;

   obj.b = 40; // statement 3
   obj.b = 30; // statement 4

   obj.d1 = 60;
   obj.d2 = 70;
   obj.d3 = 80;

   cout<< "\n B : "<< obj.b;
   cout<< "\n D1 : "<< obj.d1;
   cout<< "\n D2 : "<< obj.d2;
   cout<< "\n D3 : "<< obj.d3;
}

출력

B : 30
D1 : 60
D2 : 70
D3 : 80

이제 D3에는 B의 복사본이 하나만 있고 명령문 4는 명령문 3에 제공된 b 값을 덮어씁니다.