//스태틱 바인딩(정적 바인딩) / 다이나믹 바인딩
#include <iostream>
using namespace std;
class Animal { //C++ : Base Class, Java : Super Class
public:
//void cry(Animal* const this)
virtual void cry() { // Virtual 키워드를 사용할 경우, 정적 바인딩이 동적 바인딩으로 변경된다.
cout << "Animal::cry()" << endl;
}
};
class Cat : public Animal { //C++ : Base Class, Java : Sub Class
public:
//void cry(Cat* const this)
void cry() {
cout << "Cat::cry()" << endl;
}
};
// 정적 바인딩 : 컴파일 타임에 함수의 호출이 결정되는 메커니즘
// 동적 바인딩 : 런타임에 함수의 호출이 결정되는 메커니즘
// C++언어는 기본적으로 정적 바인딩이므로 동적바인딩을 사용하려면 virtual 키워드를 사용
// Java 언어의 경우 기본적으로 동적 바인딩이므로 사용자가 별도의 처리를 해줄 필요가 없다.
int main(void) {
Animal* pAnimal=new Animal;
pAnimal->cry(); //cry(pAnimal); //Animal::cry();
Cat* pCat=new Cat;
pCat->cry(); //cry(pCat); //Cat::cry();
Animal* p=pCat; //upcasting
p->cry(); //Animal::cry();
return 0;
}
'Developer > Design Patterns' 카테고리의 다른 글
Mayer's Singleton (객체를 정적변수로 선언) (0) | 2014.05.17 |
---|---|
C++ interface (0) | 2014.05.17 |
C++ Thread 클래스 구현 (0) | 2014.05.17 |
함수 포인터 (0) | 2014.05.17 |
정적 멤버 함수와 일반 멤버함수 (0) | 2014.05.17 |