Kursinnhold
C++ OOP
C++ OOP
Konstruktør Initialiseringsliste
En initialiseringsliste gjør det mulig for konstruktører å initialisere klassemedlemmer før konstruktørens kropp kjøres. Dette er spesielt nyttig for kompleks initialisering eller når man arbeider med objekter av klasser som har const
-medlemmer.
Syntaks for initialiseringsliste
Syntaksen for initialiseringslister kan fremstå som unødvendig kompleks og forvirrende. Man kan vurdere å kun bruke en konstruktør som et enklere alternativ. Etter hvert som programmet vokser, viser initialiseringslister seg imidlertid å være praktiske og enkle å bruke.
:
(kolontegn): introduserer medlemsinitialiseringslisten i en konstruktør;medlem (verdi): et klassemedlemsvariabel som initialiseres med verdien (argumentet som sendes til konstruktøren);
{ }
(krøllparenteser): kroppen til konstruktøren, hvor ytterligere kode kan kjøres etter medlemsinitialisering.
temperature_sensor.h
class TemperatureSensor { public: TemperatureSensor(int initialTemperature) : currentTemperature(initialTemperature) {} int currentTemperature; };
Begrensninger og hensyn
Det finnes en vanlig misforståelse angående rekkefølgen på initialisering i initialiseringslisten. I motsetning til hva mange tror, følger ikke initialisering av variabler i initialiseringslisten rekkefølgen de er skrevet i. I stedet bestemmes rekkefølgen av medlemsvariablenes deklarasjonsrekkefølge i klassen, ikke av rekkefølgen i initialiseringslisten.
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; }
Prøv å endre rekkefølgen på initialiseringen av variabelen total
i initialiseringslisten og i variabeldeklarasjonen innenfor class
.
Når du bruker initialiseringslister i en konstruktør, kan argumentnavnet være det samme som attributtnavnet til 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; }
Men hvis du bruker samme navn for både medlemsvariablene og argumentene, vil total få verdien av de multipliserte argumentene, ikke medlemmene. For å se dette, prøv å sette quantity til null i stedet for argumentet.
1. Hva er en konstruktør-initialiseringsliste?
2. Hvilket symbol introduserer medlemsinitialiseringslisten i en konstruktør?
Takk for tilbakemeldingene dine!