티스토리 뷰

LANGUAGE/C++

[C++] DYNAMIC BINDING - 동적 바인딩

진심스테이크 2018. 3. 13. 13:29

 

동적 바인딩 : 부모가 자식을 접근하는 방식

- 포인터를 사용

- is ~a 관계일때만 사용 가능 //has ~a로 상속받으면 오류

- 동적 바인딩과 정적 바인딩의 방식은 다르지만, 결과는 같아야 한다

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

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

정적 바인딩 : 내꺼를 가지고 접근

 

 

장점

1. 자식이 여러명일 때

2. 코드를 간략하게 짤 수 있다

#include "stdafx.h"
#include <iostream>
using namespace std;

class A {
public :
    virtual void disp(); //함수 선언
    void ccc() {
        cout << "ccc" << endl;
    }
};

class B : public A {
public :
    void disp(); //오버라이딩 -> virtual 안써도 자동으로 선언됨
    void ddd(){
        cout << "ddd" << endl;
    }
};

void A::disp() { //함수 정의
    cout << "A::disp()" << endl;
}

void B::disp() { //함수 정의
    cout << "B::disp()" << endl;
}

void output() { //외부 함수
    cout << "output()" << endl;
}

void main() {
    A *p;
    B bb;
    p = &bb; //부모가 자식을 접근
    //p가 A와 B를 둘다 가리킬 수 있다고 지정
    bb.disp(); //정적 바인딩
    p->disp(); //B -> A의 실체가 없어서 B에 접근

    bb.ddd();
    //p->ddd(); //error
    p->ccc();
}

 

 

'LANGUAGE > C++' 카테고리의 다른 글

[C++] STACK / QUEUE  (0) 2018.03.14
[C++] VIRTUAL FUNCTION - 가상 함수  (0) 2018.03.13
[C++] ABSTRACT CLASS - 추상 클래스  (0) 2018.03.13
[C++] MULTIPLE INHERITANCE - 다중 상속  (0) 2018.03.13
[C++] 급여관리 프로그램  (0) 2018.03.12
댓글