//스태틱 바인딩(정적 바인딩) / 다이나믹 바인딩

#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
Posted by No names
,