● 다중 상속의 문제점


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