[C++] 동적바인딩( Dynamic binding )

Programming/C++ Language 2011. 1. 3. 15:53
virtual 함수에 대해서 이야기를 해보겠습니다.

많은 개발자들이 상속을 사용하면서, virtual 함수도 많이 사용을 하게 되는데 virtual 함수를 사용함에 있어 실수 할 수도 있을 부분에 대해서 말해보겠습니다.

bool compare_garades( Core c1, Core c2 )
{
    return c1.grade() < c2.grade();
}

위와 같은 코드가 있고, Core라는 Base class가 있고, grade라는 virtual 함수가 있고, Core를 상속받는 Grad 라는 클래스가 있고, Grad 클래스는 grade함수를 오버라이드하여 재정의를 했다는 것을 전제 조건으로 설명하겠습니다.

실행할 virtual 함수를 런타임에 선택하는 것은 그 함수가 레퍼런스나 포인터를 통해 호출 될 때에만 가능한 것입니다. 하지만 객체 자체에 대한 virtual 함수를 호출하면 컴파일 시에 그 객체의 정확한 타입을 결정할 수 있습니다. 따라서 위와 같은 경우, Core라는 객체의 정확한 타입을 알수 있기 때문에 c1과 c2에 실제로 Grad함수가 전달이 되더라도, 매개변수가 객체에 대한 레퍼런스가 아니라, 객체 그 자체이므로 Grad객체의 Core파트만 잘라내어 그에 대한 복사본이compare_grades 함수의 매개변수로 전달이 되게 됩니다. 즉, 정적 바인딩이 수행되는 것입니다.

출처 : Accelerated C++

'Programming > C++ Language' 카테고리의 다른 글

typeid 키워드  (0) 2014.04.15
Unique Pointer  (0) 2014.03.03
[C++] this 포인터 사용하기  (0) 2010.07.31
[C++] 참조 변수  (1) 2010.07.31
[C++] 참조 반환  (0) 2010.07.31

설정

트랙백

댓글