티스토리 뷰
동적 바인딩
- 부모의 포인터로 자식을 접근하는 방식
- is ~a 관계일때만 사용 가능 //has ~a로 상속받으면 오류
- 동적 바인딩과 정적 바인딩의 방식은 다르지만, 결과는 같아야 한다
정적 바인딩 : 내꺼를 가지고 접근
단일 상속을 원칙으로 하되, 필요에 의해 다중 상속을 한다
#다중 상속 할때, 상속 방식을 꼭! 명시해야함 - private으로 자동으로 상속됨
다중 상속의 복잡성
만나는 구조로 상속을 받으면 같은게 2개를 상속 받아 쓰므로 터짐!
-> 해결 : 가상상속
다중 상속 가상 상속
D가 어떤 부모 클래스 (B, C)를 사용할지에 따라 A를 사용하는 클래스가 지정되어 사용된다
다중 상속 주의점
1. 상속 방식을 명확하게 기재
2. 모호성 조심 -> 발생할 수 밖에 없는 상황이라면 가상 상속을 사용
3. 가상 상속을 했고, 외부에서 부모의 값을 넘길 때, 콜론 초기화 방법을 메모리에 맞게 해야 한다
#include "stdafx.h"
#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() {}
B(int a, int b) : A(a) { this->b = b; }
void dispB() {
cout << b << endl;
}
};
class C : virtual public A{
int c;
public :
C() {}
C(int a, int c) : A(a) { this->c = c; }
void dispC() {
cout << c << endl;
}
};
class D : public B, public C{
int d;
public :
D() {}
D(int a, int b, int c, int d) : A(a), B(a, b), C(a, c) { this->d = d; }
void dispD() {
cout << d << endl;
}
};
void main() {
D dd(1,2,3,4);
dd.dispD();
dd.dispC();
dd.dispB();
dd.dispA(); //오류뜨지만, virtual을 상속함으로써 정상 작동
}
'LANGUAGE > C++' 카테고리의 다른 글
[C++] DYNAMIC BINDING - 동적 바인딩 (0) | 2018.03.13 |
---|---|
[C++] ABSTRACT CLASS - 추상 클래스 (0) | 2018.03.13 |
[C++] 급여관리 프로그램 (0) | 2018.03.12 |
[C++] CLASS RELATIONSHIP - 클래스 관계 (0) | 2018.03.08 |
[C++] CONST (0) | 2018.03.08 |
댓글