Cursusinhoud
C++ OOP
C++ OOP
Constructor-Initialisatielijst
Een initialisatielijst stelt constructors in staat om klasseleden te initialiseren voordat de constructorbody wordt uitgevoerd. Dit is vooral nuttig voor complexe initialisatie of bij het werken met objecten van klassen die const
leden bevatten.
Syntaxis van Initialisatielijst
De syntaxis van initialisatielijsten kan overdreven complex en verwarrend lijken. Men zou kunnen overwegen om alleen een constructor te gebruiken als een eenvoudigere optie. Naarmate het programma echter groeit, blijken initialisatielijsten handig en eenvoudig te gebruiken.
:
(dubbelepunt-symbool): introduceert de leden-initialisatielijst in een constructor;lid (waarde): een klasse-lidvariabele die wordt geïnitialiseerd met de waarde (argument doorgegeven aan de constructor);
{ }
(accolades): de body van de constructor, waar extra code kan worden uitgevoerd na de ledeninitialisatie.
temperature_sensor.h
class TemperatureSensor { public: TemperatureSensor(int initialTemperature) : currentTemperature(initialTemperature) {} int currentTemperature; };
Beperkingen en Overwegingen
Er bestaat een veelvoorkomend misverstand over de volgorde van initialisatie in de initialisatielijst. In tegenstelling tot wat vaak wordt gedacht, volgt het initialiseren van variabelen in de initialisatielijst niet de volgorde waarin ze zijn geschreven. In plaats daarvan wordt deze bepaald door de volgorde van declaratie van de leden in de klasse, en niet door de volgorde in de initialisatielijst.
main.cpp
#include <iostream> class Exchanger { public: Exchanger(float _quantity, float _rate) : quantity(_quantity), rate(_rate), total(quantity * rate) {} float quantity, rate, total; }; int main() { Exchanger exchanger(100, 0.3); std::cout << exchanger.total; }
Probeer de volgorde van initialisatie van de variabele total
te wijzigen in de initialisatielijst en in de variabeledeclaratie binnen de class
.
Wanneer u initialisatielijsten gebruikt in een constructor, kan de argumentnaam hetzelfde zijn als de attribuutnaam van de class
.
main.cpp
#include <iostream> class Exchanger { public: Exchanger(float quantity, float rate) : quantity(quantity), rate(rate), total(quantity * rate) {} float quantity, rate, total; }; int main() { Exchanger exchanger(100, 0.3); std::cout << exchanger.total; }
Maar als u dezelfde naam gebruikt voor zowel de lidvariabelen als de argumenten, zal total de waarde van de vermenigvuldigde argumenten, niet van de leden aannemen. Om dit te zien, probeer quantity op nul te zetten in plaats van het argument.
1. Wat is een constructor-initialisatielijst?
2. Welk symbool introduceert de leden-initialisatielijst in een constructor?
Bedankt voor je feedback!