반응형

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
}
반응형

+ Recent posts