상세 컨텐츠

본문 제목

다중 상속 시 모호성발생의 해결 방법(가상상속 처리)

C++ 언어

by ChrisMare 2018. 3. 13. 11:29

본문


※ 다중상속 시 조심해야할 점

1. 상속 방식 꼭 사용 (default ->private 상속)

2. 모호성발생 하는 상속 구조 시 -> 가상상속 처리!!!

3. 외부에서 부모한테 값을 넘길 때 콜!!!


이러한 메모리 구조로 인해 D d;라는 것이 잇다면

d.dA()를 호출 시 모호성이 발생하는데

B클래스와 C클래스가 A클래스의 dA()를 가지고 있기 때문에

모호성이 발생합니다!!!!

따라서!!


가상상속처리 후(메모리 구조)



D클래스에서 A클래스를 직접 접근하는 개념처럼 됩니다.!!!!


예제코드)


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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <iostream>
using namespace std;
 
class A {
    int a;
public:
    A()
    {
 
    }
    A(int a)
    {
        this->= a;
    }
    void dispA()
    {
        cout << a << endl;
    }
};
 
class B:virtual public A {
    int b;
public:
    B() :A::A()
    {
 
    }
    B(int a = 0int b = 0) :A::A(a)
    {
        this->= b;
    }
    void dispB()
    {
        cout << b << endl;
    }
};
 
class C:public virtual A {    // virtual 위치는 상관없다!!!
    int c;
public:
    C() :A::A()
    {
 
    }
    C(int a = 0int c = 0) :A::A(a)
    {
        this->= c;
    }
    void dispC()
    {
        cout << c << endl;
    }
};
 
class D:public B,public C
{
    int d;
public:
    D(int a = 0int b = 0int c = 0int d = 0) :B::B(a, b), C::C(a, c), A::A(a)
    {
        this->= d;
    }
    void dispD()
    {
        cout << d << endl;
    }
};
 
void main()
{
    D dd(1,2,3,4);
    
    dd.dispD();
    dd.dispC();
    dd.dispB();
    dd.dispA();
}
cs


관련글 더보기

댓글 영역