본문 바로가기

C & C++/C++

[C++] 바인딩 (정적 바인딩 & 동적 바인딩)

반응형

  • 정의

바인딩 : 함수를 호출하는 부분에 함수가 위치한 메모리 번지를 연결시켜 주는 것

 

1) 정적 바인딩 : 컴파일시간에 바인딩 결정(실제 데이터 클래스가 필요 없는 경우 대부분 사용:실행속도 빠름)

 

2) 동적 바인딩 : 실행시간에 따라 바인딩 결정.

virtual화 하여 오버라이딩을 하면 참조된 인스턴스의 실제 데이터 클래스형에 따라 재정의된 함수가 호출.

  1. 공통된 인터페이스를 제공
  2. 상위가 하위에 접근 가능
  3. 추상 클래스사용시 용이

 

  • 정적 바인딩 & 동적 바인딩

동적 바인딩을 정적 바인딩처럼 쓰기 위해서 virtual화 시킵니다. virtual화 된후에는 메모리 구조가 변경됩니다.

 

#include<iostream.h>

class Halbe{
	public:
	virtual void disp(){
		cout<<"Halbe"<<endl;
	}
};


class Abe:public Abe{
	public:
	virtual void disp(){
    	cout<<"Abe"<<endl;
	}
};


class Me:public Abe{
	public:
	virtual void disp(){
		cout<<"Me"<<endl;
	}
};


void main(){
	Me me;
	Abe abe;
	Halbe halbe;
	
	// 정적 바인딩
	halbe.disp();
	abe.disp();
	me.disp();

	// 동적 바인딩
	p=&halbe;
	p->disp();
	p=&abe;
	p->disp();
	p=&me;
	p->disp();

	/*
	switch(num){
		case 1: p=&halbe; break;
		case 2: p=&abe; break;
		case 3: p=&me; break;
	}
	p->disp();
	*/
} 

 

반응형