반응형
static binding
- 컴파일러가 컴파일 시간에 함수 호출을 결정
- 포인터 타입으로 함수 호출을 결정
- 빠름, 하지만, 비 이성적임
- 이른 바인딩( Early Binding )
- C++의 non-virtual function
dynamic binding
- 실행 시간에 함수 호출을 결정
- 포인터가 가리키는 메모리를 조사후 결정
- 느림. 하지만, 이성적
- 늦은 바인딩( Late Binding )
- java, C++의 virtual function
// Static binding
class Animal
{
public:
void Cry() { std::cout << "A Cry" << std::endl; }
};
class Dog : public Animal
{
public:
void Cry() { std::cout << "D Cry" << std::endl; }
};
int main()
{
Animal a;
Dog d;
Animal* p = &d;
p->Cry(); // C++ : A
// JAVA : D
}
// Dynamic binding
class Animal
{
public:
virtual void Cry() { std::cout << "A Cry" << std::endl; }
};
class Dog : public Animal
{
public:
virtual void Cry() override { std::cout << "D Cry" << std::endl; }
};
int main()
{
Animal a;
Dog d;
Animal* p = &d;
p->Cry(); // C++ : A
// JAVA : D
}
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
C++ RTTI(Run Time Type Information), typeid, type_info (0) | 2019.05.12 |
---|---|
C++ 가상 함수 테이블 (0) | 2019.05.12 |
C++ 인터페이스(Interface) (0) | 2019.05.12 |
C++ 추상 클래스(Abstract Class) (0) | 2019.05.12 |
C++ 상속 예제(Polymorphism) (0) | 2019.05.12 |