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

Kursusindhold

C++ OOP

C++ OOP

1. Grundlæggende OOP i C++
2. Konstruktører og Destruktører
3. Oversigt Over Indkapsling
4. Oversigt over Arv
5. Oversigt Over Polymorfi

book
Konstruktørinitialiseringsliste

En initialiseringsliste gør det muligt for konstruktører at initialisere klassemedlemmer før konstruktørens krop udføres. Det er især nyttigt til 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 medlemsinitialiseringslisten i en konstruktør;

  • medlem (værdi): et 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

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

Begrænsninger og overvejelser

Der findes en udbredt misforståelse vedrørende 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

copy
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 argumentnavnet være det samme som attributnavnet i class.

main.cpp

main.cpp

copy
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 medlemsinitialiseringslisten i en konstruktør?

question mark

Hvad er en konstruktør-initialiseringsliste?

Select the correct answer

question mark

Hvilket symbol introducerer medlemsinitialiseringslisten i en konstruktør?

Select the correct answer

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

course content

Kursusindhold

C++ OOP

C++ OOP

1. Grundlæggende OOP i C++
2. Konstruktører og Destruktører
3. Oversigt Over Indkapsling
4. Oversigt over Arv
5. Oversigt Over Polymorfi

book
Konstruktørinitialiseringsliste

En initialiseringsliste gør det muligt for konstruktører at initialisere klassemedlemmer før konstruktørens krop udføres. Det er især nyttigt til 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 medlemsinitialiseringslisten i en konstruktør;

  • medlem (værdi): et 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

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

Begrænsninger og overvejelser

Der findes en udbredt misforståelse vedrørende 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

copy
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 argumentnavnet være det samme som attributnavnet i class.

main.cpp

main.cpp

copy
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 medlemsinitialiseringslisten i en konstruktør?

question mark

Hvad er en konstruktør-initialiseringsliste?

Select the correct answer

question mark

Hvilket symbol introducerer medlemsinitialiseringslisten i en konstruktør?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 3
some-alt