Overerving

In een programma zijn klassen erg belangrijk met name bij het object georienteerd programmeren. Deze tutorial gaat hier dan ook verder op in met overerving van klassen. Je weet dat een klasse een object voorstelt zoals bijvoorbeeld een auto. Een auto heeft een aantal kenmerken die bij elke auto voorkomen zoals een motor en wielen. Stel nu dat je een aantal auto's wilt maken met verschillende kenmerken dan zou je in elke auto klasse de motor en wielen ook weer moeten vermelden. Bij overerving maak je echter 1 basisklasse (voor motor en wielen) en de andere speciefieke klassen erven deze eigenschappen dan van deze klasse. Het nut hiervan is dat je het overzicht behoud en natuurlijk dat het je veel werk scheelt. Om je een idee te geven hoe dit werkt staat hieronder een voorbeeld.

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

   void wielen();
   void motor();

   void kleur();
};

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

   void kleur();
};

int main()
{
  mercedes *pMercedes = new mercedes;
  pMercedes->kleur();

  return 0;
}

Een heel simpel voorbeeld, maar het moet voldoende zijn om het idee van overerving duidelijk te maken. Wat hier gebeurt is dus dat de klasse mercedes alle protected dataleden van auto erft alsof ze dus eigenlijk in de klasse mercedes staan. Wat opvalt is dat ik nu in plaats van public of private protected gebruik. Het verschil is dat public dataleden altijd opgeroepen kunnen worden door elke functie of door elke klasse. Protected dataleden kunnen echter alleen maar door afgeleide klassen opgeroepen worden wat uiteraard veel "veiliger" is.

Stel nu dat je de klasse mercedes wilt gebruiken door bijvoorbeeld "mercedes mijnmercedes;" te schrijven. Als eerste wordt dan de auto constructor opgeroepen en vervolgens de mercedes constructor, een mercedes erft namelijk de eigenschappen van auto dus die zal er al moeten zijn voor de mercedes. Je ziet nu ook dat de auto twee constructors heeft die opgeroepen worden afhankelijk van wat voor waarden je aan de klasse meegeeft. Als je bijvoorbeeld zegt "mercedes mijnmercedes;" dan wordt de auto(); constructor opgeroepen. Als je echter schrijft "mercedes mijnmercedes(150);" dan wordt de auto(int motor); constructor opgeroepen. Hetzelfde geldt voor de mercedes klasse als deze meerdere constructors bezit.

Het laatste dat hier gebeurt is dat het datalid kleur wordt overloaded. Je ziet dat in de klasse auto een datalid bestaat met de naam kleur en dat deze in de klasse mercedes nog een keer voorkomt. Als je dit datalid oproept wordt het datalid kleur van de klasse mercedes opgeroepen. Het voordeel is uiteraard dat je een standaard kleur in kunt stellen, maar als je een andere kleur wilt je deze met gemak kunt overloaden en de auto een andere kleur kunt geven. Als je dan toch het kleur datalid van auto wilt oproepen kun je dat altijd doen door te schrijven "mijnauto.auto::kleur();" en dan blijft de auto de kleur die je in de basis klasse hebt gedefinieerd.

Een korte maar krachtige tutorial moet ik zeggen maar in de praktijk leer je het meeste. Op zich is dit niet zo moeilijk en raad ik je ook aan om dit gewoon een beetje uit te proberen dan merk je vanzelf hoe makkelijk het is om klassen op deze manier te gebruiken. Bovendien leer je dit vanzelf wel goed te gebruiken als je wat verder gaat richting het game programmeren, je hebt nu in ieder geval de basis kennis.

Succes

Vampire,