Thuis
Contacten

    Hoofdpagina


Programmeren in C++ voor beginners

Dovnload 5.04 Mb.

Programmeren in C++ voor beginners



Pagina43/49
Datum25.10.2017
Grootte5.04 Mb.

Dovnload 5.04 Mb.
1   ...   39   40   41   42   43   44   45   46   ...   49

Constructor

De Klok klasse bevat echter een grote fout. Onderstaande code gaat (vaak) mis:


Klok k;

const int uren = k.GetUren();
Bovenstaande code gaat mis, omdat het aantal uren niet geinitialiseerd is.
Hieronder staat een niet-oplossing:
struct Klok

{

void Initialiseer() { mUren = 0; mMinuten = 0; }

//De rest

};
Het probleem met een initialiseer methode is dat de gebruiker van de klasse deze kan vergeten aan te roepen.


Er bestaat een speciale methode om een klasse te initialiseren op het moment dat deze gecreeerd wordt: de constructor.
struct Klok

{

Klok()



{

mMinuten = 0;

mUren = 0;

}

//De rest



};
Merk het volgende op:

* Een constructor is een methode met dezelfde naam als de klasse.

* Een constructor heeft geen return data type.
Deze constructor, de constructor zonder argumenten, wordt de default constructor genoemd.
Voor de constructor is ook een alternatieve, betere schrijfwijze: de initialisatielijst.
struct Klok

{

Klok() : mMinuten(0), mUren(0)



{

//Ha, alles is al geinitialiseerd

}

//De rest



};
Merk het volgende op:

* Na de klasse naam en ronde haken, wordt er een dubbele punt geschreven.

* De variabelen worden niet met het '='-teken geinitialiseerd, maar met de waarde tussen ronde haken.

* De variabelen zijn gescheiden met komma's.



* Na het laatste argument staat er niets meer tot de accolade openen van de constructor




Geef de voorkeur aan de initialisatielijst boven het gebruik van toekenningen (met de '='-operator,'assignment')

Het is mogelijk om meerdere constructoren te definieren:


struct Klok

{

Klok() : mMinuten(0), mUren(0) { }



Klok(const int minuten, const int uren)

: mMinuten(minuten), mUren(uren) { }

//De rest

};
Met deze twee constructors kunnen we onderstaande code schrijven:


Klok k1; //Roept de default constructor aan

Klok k2(10,10);


Het zou fijn zijn als we zouden kunnen kijken uit welke constructoren we kunnen kiezen. Onderstaand screenshot zou een lijst moeten tonen met welke constructoren er zijn, maar doet dit helaas niet altijd.

Om toch te kunnen spieken, gebruik dan even onderstaande truc.

Merk het volgende op:

* Er zijn drie (!) mogelijke constructoren.

* De bovenste constructor is de default constructor zonder argumenten

* De tweede constructor toont de ints zonder const.

* De derde constructor wordt de copy constructor genoemd. Deze heeft een Klok als argument nodig. Deze Klok wordt met reference-by-const doorgegeven.
De copy constructor behandelen we niet, maar onderstaande code is mogelijk door deze automatisch aangemaakte constructor:
const Klok k1; //Default constructor

const Klok k2(k1); //Copy constructor
Ook String en std::vector hebben meerdere constructoren. Met F1 kun je uitvinden hoe deze werken.

1   ...   39   40   41   42   43   44   45   46   ...   49


Dovnload 5.04 Mb.