다이아몬드 상속문제.
해결하기위해 가상 기본 클래스를 사용한다.
숫자는 class :는 상속을 나타낸다.
아래처럼 상속하면 다이아몬드 구조로 될거 같지만
1class가 두번 생성된다.
1
2 :(상속) 1 , 3 :(상속) 1
4 :(상속) 2,3
상속할때 상속하는 코드에 virtual을 쓰면 한번만 생성된다.
맨 마지막 자식 테이블에서 1class 생성자를 정의해준다.
#include <iostream>
using namespace std;
class PowerDevice
{
public:
int m_power;
PowerDevice(int power){
cout << "PowerDevice : " << power << endl;
}
};
class Scanner : virtual public PowerDevice
{
public:
Scanner(int scan, int power)
:PowerDevice(power) {
cout << "Scanner : " << scan << endl;
}
};
class Printer : virtual public PowerDevice
{
public:
Printer(int prin, int power)
:PowerDevice(power) {
cout << "Printer : " << prin << endl;
}
};
class Copier : public Scanner, public Printer
{
public:
Copier(int scan, int prin, int power)
:Scanner(scan, power), Printer(prin, power) ,PowerDevice(power){}
};
int main()
{
Copier c(1, 2, 3);
//주소값이 다르다.
cout << &c.Scanner::PowerDevice::m_power << endl;
cout << &c.Printer::PowerDevice::m_power << endl;
return 0;
}
'개발 소발 > 개발 C++(기초)' 카테고리의 다른 글
c++ dynamic_cast 동적형변환 (0) | 2019.09.30 |
---|---|
c++ 객체잘림,reference wapper (0) | 2019.09.30 |
c++ 순수가상함수,추상기본클래스,인터페이스 (0) | 2019.09.30 |
c++ vitual,가상함수 (0) | 2019.09.30 |
c++ 정적,동적바인딩 (0) | 2019.09.30 |