Meer klassen

Je weet nu hoe klassen werken dus wordt het nu tijd om hier wat dieper op in te gaan aangezien je in een programma vaak klassen tegen zult gaan komen.

Bij variabelen heb je constante variabelen die je niet kunt veranderen, de waarde staat vast. In klassen kun je dit natuurlijk ook doen, maar in een klasse kun je ook constante methoden declareren wat wil zeggen dat de methode de waarde van leden van de klasse niet mag veranderen. Het voordeel van constante methoden is dat het zo makkelijker is om fouten op te sporen doordat de compiler een error geeft als een constante methode een lidvariabele probeert te veranderen. Een const methode wordt als volgt gedeclareert.

void lidfunctie() const;

Hoewel je de methoden niet constant hoeft te maken is het dus alleen maar makkelijk om het wel te doen om fouten te voorkomen. Ook is het makkelijk om klassen in header bestanden te zetten in plaats van ze in je programma te definieren waardoor je code beter leesbaar blijft.

Zoals je al weet kunnen functies en statements gekoppeld worden tot complexere functies en statements, met klassen kan dit dus ook. Je kunt meerdere klassen aan elkaar koppelen om complexe bewerkingen uit te voeren en toch een goed overzicht houden zodat je later makkelijk aanpassingen kunt maken en delen van de code kunt hergebruiken. Hieronder vind je een voorbeeld van een complexe klasse.


class motor		//motor klasse
{
  public:		//public dataleden
    int cylinders;
    int motorinhoud;
}

class auto		//auto klasse
{
  public:		//public dataleden
    auto(int cylinders, int motorinhoud);  //constructor
    ~auto(){}				   //inline destructor

    int merk;
    int kleur;
    motor typemotor;
}

auto::auto			//constructor van class auto
{
  typemotor.cylinders=6;
  typemotor.motorinhoud=1.8;
}
Dit is een heel simpel voorbeeldje en zal ook weinig doen maar als voorbeeld is het makkelijker te begrijpen dan een uitgebreid voorbeeld. Wat ik heb gedaan is een auto klasse gemaakt en een apparte motor klasse zodat ik de motor zo weer in een andere auto kan zetten zonder al te veel werk. Binnen de auto klasse kan ik nu dus een motor declareren zoals hier "typemoter". Als dan de auto klasse wordt gedeclareerd (ergens in je programma) dan wordt de constructor opgeroepen die de waarden 6 en 1.8 in de lidvariabelen cylinders en motorinhoud zet. Als het programma uiteindelijk af is gelopen wordt de destructor opgeroepen en wordt het geheugen weer leeggemaakt. De destructor is hier een inline destructor omdat de definitie ervan binnen de auto klasse zelf gebeurt, en niet zoals bij de constructor waar dit buiten de klasse gebeurt.

Succes

Vampire,