#include <iostream.h>
#include "Virtual.h"

ObGrafic::ObGrafic(){cout << "\n Constructor ObiectGrafic";}

ObGrafic::~ObGrafic(){cout << "\n Destructor ObiectGrafic";}

void ObGrafic::Desenez(){cout << "\n Desenez un ObiectGrafic";}

Cerc::Cerc(){cout << "\n Constructor Cerc";}

Cerc::~Cerc(){cout << "\n Destructor Cerc";}

void Cerc::Desenez(){cout << "\n Desenez un Cerc";}

Patrat::Patrat(){cout << "\n Constructor Patrat";}

Patrat::~Patrat(){cout << "\n Destructor Patrat";}

void Patrat::Desenez(){cout << "\n Desenez un Patrat";}

void main()
{
   ObGrafic* ptab[3];
   ptab[0] = new ObGrafic();
   ptab[1] = new Cerc(); // conversie implicita! 
   ptab[2] = new Patrat; // din nou conversie implicita!

   // acum ptab este un tablou neomogen...
   for(int i=0; i<3; i++)
		ptab[i]->Desenez();
	// care este tratat într-o maniera uniforma,datorita mecanismului 
	// functiilor virtuale

   for(i=0; i<3; i++)
      delete ptab[i];   // eliberare memorie
}
