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
course content

Kursinnhold

C++ OOP

C++ OOP

1. Grunnleggende om OOP i C++
2. Konstruktører og Destruktører
3. Oversikt Over Innkapsling
4. Oversikt over Arv
5. Oversikt over Polymorfisme

book
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

temperature_sensor.h

copy
1234567
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

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
Merk

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

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 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?

question mark

Hva er en konstruktør-initialiseringsliste?

Select the correct answer

question mark

Hvilket symbol introduserer medlemsinitialiseringslisten i en konstruktør?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 3

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

course content

Kursinnhold

C++ OOP

C++ OOP

1. Grunnleggende om OOP i C++
2. Konstruktører og Destruktører
3. Oversikt Over Innkapsling
4. Oversikt over Arv
5. Oversikt over Polymorfisme

book
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

temperature_sensor.h

copy
1234567
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

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
Merk

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

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 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?

question mark

Hva er en konstruktør-initialiseringsliste?

Select the correct answer

question mark

Hvilket symbol introduserer medlemsinitialiseringslisten i en konstruktør?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 3
some-alt