※ 다중상속 시 조심해야할 점
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 = a; } void dispA() { cout << a << endl; } }; class B:virtual public A { int b; public: B() :A::A() { } B(int a = 0, int b = 0) :A::A(a) { this->b = b; } void dispB() { cout << b << endl; } }; class C:public virtual A { // virtual 위치는 상관없다!!! int c; public: C() :A::A() { } C(int a = 0, int c = 0) :A::A(a) { this->c = c; } void dispC() { cout << c << endl; } }; class D:public B,public C { int d; public: D(int a = 0, int b = 0, int c = 0, int d = 0) :B::B(a, b), C::C(a, c), A::A(a) { this->d = d; } void dispD() { cout << d << endl; } }; void main() { D dd(1,2,3,4); dd.dispD(); dd.dispC(); dd.dispB(); dd.dispA(); } | cs |
가상 함수 - virtual Function (0) | 2018.03.13 |
---|---|
동적 바인딩(DynamicBinding) (0) | 2018.03.13 |
Has~a관계 이용한 데이터 관리클래스 (학생성적 C++) (0) | 2018.03.08 |
Class 관계 - Has ~ a 관계(C++) (0) | 2018.03.08 |
오버로딩(Overloading) (0) | 2018.03.06 |
댓글 영역