Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Konstruktør Initialiseringsliste | Konstruktører og Destruktører
C++ OOP

Konstruktør Initialiseringsliste

Stryg for at vise menuen

En initialiseringsliste gør det muligt for konstruktører at initialisere klassemedlemmer før konstruktørens krop udføres. Dette er især nyttigt ved kompleks initialisering eller når der arbejdes med objekter af klasser, der har const medlemmer.

Syntaks for initialiseringsliste

Syntaksen for initialiseringslister kan virke unødigt kompleks og forvirrende. Man kunne overveje kun at bruge en konstruktør som et enklere alternativ. Men efterhånden som programmet vokser, viser initialiseringslister sig at være praktiske og nemme at anvende.

  • : (kolon-symbol): introducerer medlems-initialiseringslisten i en konstruktør;

  • medlem (værdi): en klassemedlemsvariabel, der initialiseres med værdien (argumentet, der gives til konstruktøren);

  • { } (krøllede parenteser): konstruktørens krop, hvor yderligere kode kan udføres efter medlemsinitialisering.

temperature_sensor.h

temperature_sensor.h

1234567
class TemperatureSensor { public: TemperatureSensor(int initialTemperature) : currentTemperature(initialTemperature) {} int currentTemperature; };

Begrænsninger og overvejelser

Der findes en udbredt misforståelse omkring rækkefølgen af initialisering i initialiseringslisten. Modsat hvad mange tror, følger initialiseringen af variabler i initialiseringslisten ikke den rækkefølge, de er skrevet i. I stedet bestemmes rækkefølgen af medlemsdeklarationerne i klassen, ikke af rækkefølgen i initialiseringslisten.

main.cpp

main.cpp

123456789101112131415
#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; }
Note
Bemærk

Prøv at ændre rækkefølgen for initialisering af variablen total i initialiseringslisten og i variabeldeklarationen inden for class.

Når du bruger initialiseringslister i en konstruktør, kan argumentets navn være det samme som attributnavnet i class.

main.cpp

main.cpp

123456789101112131415
#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 bruger det samme navn til både medlemsvariablerne og argumenterne, vil total få værdien af de multiplicerede argumenter, ikke medlemmerne. For at se dette, prøv at sætte quantity til nul i stedet for argumentet.

1. Hvad er en konstruktør-initialiseringsliste?

2. Hvilket symbol introducerer medlems-initialiseringslisten i en konstruktør?

question mark

Hvad er en konstruktør-initialiseringsliste?

Vælg det korrekte svar

question mark

Hvilket symbol introducerer medlems-initialiseringslisten i en konstruktør?

Vælg det korrekte svar

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 3

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Sektion 2. Kapitel 3
some-alt