Polymorfie

Wat polymorfie is kan ik je moeilijk uitleggen in woorden dus ik zal het maar metteen met een voorbeeld proberen te doen. Bij polymorfie mag je schrijven.

auto *pAuto = new mercedes;

Je mag dus een pointer naar de basis klasse auto maken en daarin een mercedes object in opslaan. Om het idee duidelijk te maken staat hieronder een stukje code.


class auto
{
protected:
   auto(){}
   auto(int motor){}
   ~auto(){}

   void wielen();
   void motor();

   virtual void kleur();
};

clas mercedes : public auto
{
   mercedes(){}
   ~mercedes(){}

   void motor();
   void kleur();
};

int main()
{
  auto *pAuto = new mercedes;
  pAuto->kleur();
  pAuto->motor();

  return 0;
}
Als je naar de main functie kijkt wordt er dus een pointer naar een auto object gemaakt waarin een mercedes object wordt opgeslagen, tja een mercedes is een auto dus waarom niet ? Vervolens wordt er naar het datalid kleur verwezen (bij een pointer naar een klasse -> in plaats van een punt). De functie kleur is zoals je ziet in de classe auto en mercedes aanwezig dus welke wordt nu gebruikt. Omdat de functie in auto virtueel is wordt aangenomen dat deze hergedefinieerd wordt door een andere klasse, en als deze dan ook aanwezig is wordt het datalid van die klasse opgeroepen. In dit geval dus het datalid kleur van de mercedes klasse. Als voorbeeld roep ik ook nog het motor datalid op die dus uiteraard (er staat geen virtual voor) de motor functie van de auto klasse uitvoert.

Geen probleem dacht ik toch ? Succes

Vampire,