● 다중 상속의 문제점
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | class BaseIO { public: int mode; }; class In : public BaseIO { public: int readPos; }; class Out : public BaseIO { public: int writePos; }; class InOut : public In, public Out { public: bool safe; }; int main() { InOut ioObj; ioObj.readPos = 10; ioObj.writePos = 20; ioObj.safe = true; ioObj.mode = 5; } | cs |
In과 Out 중 어느 클래스의 기본 클래스의 mode 인지 모호해진다.
=> 다이아몬드 형의 다중 상속 구조는 기본 클래스의 멤버가 중복 상속 되어 객체 속에 조재하는 상황을 초래하여 컴파일 오류를 발생시킨다.
● 가상 상속
: virtual 키워드를 이용하여 가상 상속을 선언하여 다중 상속에서 생기는 멤버 중복 생성 문제를 해결한다.
: virtual 키워드는 컴파일러에게 파생 클래스의 객체가 생성될 때 기본 클래스의 멤버 공간을 오직 한 번만 할당하고,
이미 할당되어 있다면 그 공간을 공유하도록 지시한다.
1 2 3 4 5 6 | class In : virtual public BaseIO { // BaseIO클래스를 가상 상속함 ... }; class Out : virtual public BaseIO{ // BaseIO클래스를 가상 상속함 ... }; | cs |
'C++ > C++ 문법' 카테고리의 다른 글
pair 사용 (0) | 2019.05.17 |
---|---|
#09 - 1 가상함수와 추상 클래스 (1) | 2018.10.08 |
#8-3 상속과 생성자, 소멸자 (0) | 2018.10.07 |
#8-2 상속과 객체 포인터 (0) | 2018.10.07 |
#8-1 상속 (0) | 2018.10.07 |