Sample - Virtual Functions in C++:                                    Notes   Code
#include "iostream.h"  //for cout

class CBase
{
public:
    virtual void PrintVirtual()
    {
        cout << "PrintVirtual(): Printing from the base class ..." << endl;
    }

    void Print()
    {
        cout << "Print(): Printing from the base class ..." << endl;
    }
};

class CDerived: public CBase
{
public:
    void PrintVirtual()
    {
        cout << "PrintVirtual(): Printing from the derived class ..." << endl;
    }

    void Print()
    {
        cout << "Print(): Printing from the derived class ..." << endl;
    }
};

void main()
{
   /*
    * We want to use base class implementation of PrintVirtual() function.
    */
     
    CBase* pBase = new CBase;
    pBase->PrintVirtual();
    delete pBase;

   /*
    * Now, we want to use pointer to the same CBase class to print text
    * using overridden PrintVirtual() function defined in the derived 
    * class.
    */

   CDerived* pDerived = new CDerived;

   pBase = pDerived; //or in one line CBase* pBase = new CDerived;
   pBase->PrintVirtual();
   delete pDerived;
	
   /*
    * Next lines remind us that the mechanism of overriding is not
    * exclusively bounded to virtual functions and polimorphism.
    * Print() in CDerived has the same name as Print() function in
    * CBase, and overriding works without use of virtual keyword.
    */
	 
    pDerived = new CDerived;
    pDerived->Print(); 

   /*
    * However, in this case pBase pointer cannot be used to
    * access overriden function in the derived class.
    */

    pBase = new CBase;
    pBase->Print();

    pBase = pDerived;
    pBase->Print();    //same result!
}

Console Output:

PrintVirtual(): Printing from the base class ...
PrintVirtual(): Printing from the derived class ...
Print(): Printing from the derived class ...
Print(): Printing from the base class ...
Print(): Printing from the base class ...
(c) 2002, Stan Malevanny