문서 편집 권한이 없습니다. 다음 이유를 확인해주세요: 요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다: 사용자. 문서의 원본을 보거나 복사할 수 있습니다. [[분류:프로그래밍]] <source lang="cpp"> #include <iostream> class Base { public: void Call() { std::cout <<__LINE__<< __FUNCDNAME__ << "is called!" << std::endl; } virtual void Call(int a) { std::cout <<"Base::" <<__LINE__ << __FUNCDNAME__ << "is called!"<<a << std::endl; } }; class Derived :public Base { public: void Call() { std::cout << __LINE__ << __FUNCDNAME__ << "is called!" << std::endl; } virtual void Call(int a) { std::cout << "Derived::" << __LINE__ << __FUNCDNAME__ << "is called!" << a << std::endl; } }; int main() { Derived * a = (Derived*) new Base(); Base * b = new Derived; a->Call(); b->Call(); a->Call(5); b->Call(5); delete a; delete b; std::cout << "Hello World!\n"; } </source> * 매개 변수가 없는 멤버함수 Call은 가상함수가 아니기 때문에 컴파일 타임에 포인터의 타입인 Derived인지 혹은 Based인지에 따라 호출된 함수 몸체가 결정된다. *매개 변수가 있는 멤버함수 Call은 가상함수이기 때문에 실행 중에 객체의 vtable에 따라 호출될 함수 몸체가 결정된다. <pre> 23?Call@Derived@@QAEXXZis called! 11?Call@Base@@QAEXXZis called! Base::15?Call@Base@@UAEXH@Zis called!5 Derived::27?Call@Derived@@UAEXH@Zis called!5 Hello World! </pre> C++의 정적 바인딩과 동적 바인딩 문서로 돌아갑니다.