C++의 가상 함수는 파생 클래스 개체의 종류를 모른 채 기본 클래스 포인터 목록을 만들고 파생 클래스의 메서드를 호출하는 데 사용합니다. 가상 기능은 런타임에 늦게 해결됩니다.
가상 기능의 주요 용도는 런타임 다형성을 달성하는 것입니다. 런타임 다형성은 기본 클래스 유형의 포인터(또는 참조)를 통해서만 달성할 수 있습니다. 또한 기본 클래스 포인터는 기본 클래스의 개체와 파생 클래스의 개체를 가리킬 수 있습니다. 위 코드에서 베이스 클래스 포인터 'b'는 파생 클래스의 'd' 객체 주소를 담고 있습니다.
예시 코드
#include<iostream> using namespace std; class B { public: virtual void s() { cout<<" In Base \n"; } }; class D: public B { public: void s() { cout<<"In Derived \n"; } }; int main(void) { D d; // An object of class D B *b= &d; // A pointer of type B* pointing to d b->s(); // prints "D::s() called" return 0; }
출력
In Derived