Programming/C C++
기반클래스 하나를 두개의 파생클래스가 똑같이 상속받고 이 두개의 파생클래스를 다시 하나의 또 다른 파생클래스가 상속받는 경우
class Base

class Deri1:public Base
class Deri2:public Base

class Deri_end:public Deri1, public Deri2

기반클래스(Base)는 이를 상속받는 파생클래스(Deri1, Deri2)마다 하나씩 개별적으로 생성됩니다.


따라서 위와 같은 상속의 형태를 갖게 되는데 이를


위와 같은 형태로 바꾸고자 한다면 가상상속을 구현해야 합니다.
class Deri1:public virtual Base
{
};

class Deri2:public virtual Base
{
};
가상상속은 간단한데 파생클래스에서 기반클래스를 상속받을때 virtual 키워드를 포함하기만 하면 됩니다. 실제로 기반클래스에 생성자와 소멸자를 추가하고
class Base
{
public:
   Base::Base();
   Base::~Base();
};

Base::Base()
{
   cout << "기반 클래스 생성자" << endl;
}

Base::~Base()
{
   cout << "기반 클래스 소멸자" << endl;
}
프로그램을 빌드하여 실행시켜 보면
Deri_end* de = new Deri_end();

delete de;
다음과 같이


기반클래스의 생성자와 소멸자가 한번씩만 호출되었음을 알 수 있습니다. 하나의 기반클래스를 두개의 파생클래서에서 상속받았음에도 불구하고 각각의 파생클래스에서 기반클래스 하나만을 공유하고 있기 때문입니다.
0 0