18.8 Virtual base classes
17.9의 multiple inheritance에서 우리는 diamond problem에 대해서 잠깐 이야기 했었다
이번 섹션에서 우리는 이에 대한 논의를 계속해본다
우리는 위의 관계를 생각하고 있지만
만약 우리가 copier class object를 만든다면
프로그램은 위처럼 인식해
PoweredDevice를 두번 생성할 것이다
Virtual base classes
이를 해결하기 위해 우리는 virtual 키워드를 이용해
virtual base class를 설정해줄 것이다
#include <iostream>
class PoweredDevice
{
public:
PoweredDevice(int power)
{
std::cout << "PoweredDevice: " << power << '\n';
}
};
class Scanner: virtual public PoweredDevice // note: PoweredDevice is now a virtual base class
{
public:
Scanner(int scanner, int power)
: PoweredDevice{ power } // this line is required to create Scanner objects, but ignored in this case
{
std::cout << "Scanner: " << scanner << '\n';
}
};
class Printer: virtual public PoweredDevice // note: PoweredDevice is now a virtual base class
{
public:
Printer(int printer, int power)
: PoweredDevice{ power } // this line is required to create Printer objects, but ignored in this case
{
std::cout << "Printer: " << printer << '\n';
}
};
class Copier: public Scanner, public Printer
{
public:
Copier(int scanner, int printer, int power)
: PoweredDevice{ power }, // PoweredDevice is constructed here
Scanner{ scanner, power }, Printer{ printer, power }
{
}
};
위와 같이 되었을 때 PoweredDevice의 constructor는 한번만 실행된다
Printer와 Scanner는 virtual public으로 PoweredDevice를 상속받고 있다
자세한 내용은 고급 주제로 생략한다
Author And Source
이 문제에 관하여(18.8 Virtual base classes), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ikmy0ung/18.8-Virtual-base-classes저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)