상세 컨텐츠

본문 제목

동적 바인딩(DynamicBinding)

C++ 언어

by ChrisMare 2018. 3. 13. 14:03

본문

※ 추상클래스

1. 가상함수를 하나 이상 가지고 있는 클래스

2. 오직 상속을 목적을 사용 (has~a관계일 때는 x -> 일반적으론 객체를 못만들기 떄문이다)


 동적바인딩

1. 부모의 포인터로 자식을 접근하는 방식

2. is~A 관계 일때만 사용가능

3. 정적바인딩과 같은 결과가 나와야한다. ( 중요! )

4. 부모가 인식할 수 있는 범위까지만 사용가능하다.

즉, 부모만 가지고 있는 경우 또는 오버라이딩한 멤버만 접근가능.

보모의 함수를 자식이 오버라이딩을 꼭 해야된다.!! 안하면 접근 X.

5. 장점은 부모가 자식을 접근을 할 때 어떤 자식으로도 접근할 수 있다.

=> 코드 간략!!

=> 다양하게 접근할 수 있다!! (다양성) - 궁극적인 목표


예제 소스)



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
#include <iostream>
using namespace std;
class A
{
public:
    virtual void disp();    // 함수 선언 , 동적바인딩을 위해 가상함수로 한다.
    void cccc() { cout << "A::cccc()" << endl; }
};
 
class B :public A
{
public:
    virtual void disp();    // 오버라이딩
    void dddd() { cout << "B::dddd()" << endl; }
};
void B::disp()    // 함수 정의 (A::를 통해서 명시해야지만 가능)
{
    cout << "B::disp()" << endl;
}
void A::disp()    // 함수 정의 (A::를 통해서 명시해야지만 가능)
{
    cout << "A::disp()" << endl;
}
void output()    // 외부 함수
{
    cout << "output()" << endl;
}
 
void main()
{
    A *p;
    B bb;
 
    p = &bb;    // 동적바인딩
 
    bb.disp();
    p->disp();    // 자기성질이 우선이라서 A::disp()가 호출된다.
                // java는 자동으로 해주지만 c++은 개발자가 직접 처리해야된다!!
                // 따라서 가상함수를 이용해야한다!!
    bb.dddd();
    // p->dddd();    // error
    p->cccc();
 
        /*
            output();    // 외부 함수
            A aa;
            aa.disp();
            B bb;
            bb.disp();    //bb.B::disp();
            // 정석으로는 하지만 자신의 클래스이기때문에 우선순위가 있기때문에 생략가능!!
            bb.A::disp();
        */
 
}
cs


관련글 더보기

댓글 영역