#include class myOldClass { public: int i1; virtual void func1(int i) { cout << "Calling myOldClass.func1(int)...\n"; i1 = i1 + i*i; } }; class myNewClass : public myOldClass { public: int i2; virtual void func1(int i) { cout << "Calling myNewClass.func1(int)...\n"; i2 = i2 + 1000*i; } }; int main(int argc, char *argv[]) { myOldClass A; myOldClass *ptr1; myNewClass B; myNewClass *ptr2; myOldClass *ptr; A.i1 = 0; B.i1 = B.i2 = 0; // ************************************************************************* // Function polymorphism // ************************************************************************* ptr = &A; cout << "ptr = &A; Invoking ptr->func1(4)" << endl; ptr->func1(4); // The same expression invoke func1() in myOldClass cout << endl; ptr = &B; cout << "ptr = &B; Invoking ptr->func1(4)" << endl; ptr->func1(4); // The same expression invoke func1() in myNewClass }