Virtual functions retain virtual nature when inherited.
#include <iostream> using namespace std; class BaseClass { public: virtual void myFunction() { cout << "Using BaseClass version of myFunction()\n"; } }; class DerivedClass1 : public BaseClass { public: void myFunction() { cout << "Using DerivedClass1's version of myFunction()\n"; } }; class DerivedClass2 : public DerivedClass1 { public: void myFunction() { cout << "Using DerivedClass2's version of myFunction()\n"; } }; int main() { BaseClass *p; BaseClass ob; DerivedClass1 derivedObject1; DerivedClass2 derivedObject2; p = &ob; p->myFunction(); // use BaseClass's myFunction() p = &derivedObject1; p->myFunction(); // use DerivedClass1's myFunction() p = &derivedObject2; p->myFunction(); // use DerivedClass2's myFunction() return 0; }