#include <iostream>
using namespace std;
class PoweredDevice
{
public:
int m_i;
PoweredDevice (int power)
{
cout << "PoweredDevice: " << power << "\n";
}
};
class Scanner : virtual public PoweredDevice
{
public:
Scanner(int scanner, int power)
: PoweredDevice(power)
{
cout << "Scanner: " << scanner << "\n";
}
};
class Printer : virtual public PoweredDevice
{
public:
Printer(int printer, int power)
: PoweredDevice(power)
{
cout << "Printer: " << printer << "\n";
}
};
class Copier : public Scanner, public Printer
{
public:
Copier(int scanner, int printer, int power)
: Scanner(scanner, power), Printer(printer, power),
PoweredDevice(power) // virtual 붙일 시 에러가 뜨는데, 이렇게 부모 클래스의 생성자를 별도로 만들어주면 된다.
{}
};
int main()
{
Copier cop(1, 2, 3);
cout << &cop.Scanner::PoweredDevice::m_i << "\n";
cout << &cop.Printer::PoweredDevice::m_i << "\n"; // virtual 없을 시 두 m_i의 주소가 다르다.
// virtual 있을 시 PoweredDevice 호출이 1번, 그리고 m_i의 주소가 같다.
// 그러니까, PoweredDevice가 하나란 얘기.
return 0;
}