Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Konstruktörinitialiseringslista | Konstruktorer och Destruktorer
C++ OOP
course content

Kursinnehåll

C++ OOP

C++ OOP

1. Grunderna i OOP i C++
2. Konstruktorer och Destruktorer
3. Översikt Av Inkapsling
4. Översikt av Arv
5. Översikt av Polymorfism

book
Konstruktörinitialiseringslista

En initieringslista gör det möjligt för konstruktorer att initiera klassmedlemmar innan konstruktorns kropp körs. Detta är särskilt användbart för komplex initiering eller när man arbetar med objekt av klasser som har const-medlemmar.

Syntax för initieringslista

Syntaxen för initieringslistor kan verka överdrivet komplex och förvirrande. Man kan överväga att endast använda en konstruktor som ett enklare alternativ. Men när programmet växer visar sig initieringslistor vara bekväma och enkla att använda.

  • :(kolontecken): introducerar medlemsinitieringslistan i en konstruktor;

  • medlem (värde): en klassmedlemsvariabel som initieras med värdet (argumentet som skickas till konstruktorn);

  • { }(klamrar): konstruktorns kropp, där ytterligare kod kan köras efter medlemsinitieringen.

temperature_sensor.h

temperature_sensor.h

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

Begränsningar och överväganden

Det finns en vanlig missuppfattning angående ordningen för initialisering i initialiseringslistan. Tvärtemot vad många tror, följer inte variablerna den ordning de skrivs i initialiseringslistan. Istället bestäms ordningen av medlemsdeklarationerna i klassen, inte av sekvensen i initialiseringslistan.

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
Notera

Försök att ändra ordningen för initialisering av variabeln total i initialiseringslistan och i variabeldeklarationen inom class.

När du använder initialiseringslistor i en konstruktor kan argumentnamnet vara detsamma som attributnamnet 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 om du använder samma namn för både medlemsvariablerna och argumenten, kommer total att ta värdet av de multiplicerade argumenten, inte medlemmarna. För att se detta, försök att sätta quantity till noll istället för argumentet.

1. Vad är en konstruktörs initialiseringslista?

2. Vilken symbol introducerar medlemsinitialiseringslistan i en konstruktör?

question mark

Vad är en konstruktörs initialiseringslista?

Select the correct answer

question mark

Vilken symbol introducerar medlemsinitialiseringslistan i en konstruktör?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 3

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

course content

Kursinnehåll

C++ OOP

C++ OOP

1. Grunderna i OOP i C++
2. Konstruktorer och Destruktorer
3. Översikt Av Inkapsling
4. Översikt av Arv
5. Översikt av Polymorfism

book
Konstruktörinitialiseringslista

En initieringslista gör det möjligt för konstruktorer att initiera klassmedlemmar innan konstruktorns kropp körs. Detta är särskilt användbart för komplex initiering eller när man arbetar med objekt av klasser som har const-medlemmar.

Syntax för initieringslista

Syntaxen för initieringslistor kan verka överdrivet komplex och förvirrande. Man kan överväga att endast använda en konstruktor som ett enklare alternativ. Men när programmet växer visar sig initieringslistor vara bekväma och enkla att använda.

  • :(kolontecken): introducerar medlemsinitieringslistan i en konstruktor;

  • medlem (värde): en klassmedlemsvariabel som initieras med värdet (argumentet som skickas till konstruktorn);

  • { }(klamrar): konstruktorns kropp, där ytterligare kod kan köras efter medlemsinitieringen.

temperature_sensor.h

temperature_sensor.h

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

Begränsningar och överväganden

Det finns en vanlig missuppfattning angående ordningen för initialisering i initialiseringslistan. Tvärtemot vad många tror, följer inte variablerna den ordning de skrivs i initialiseringslistan. Istället bestäms ordningen av medlemsdeklarationerna i klassen, inte av sekvensen i initialiseringslistan.

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
Notera

Försök att ändra ordningen för initialisering av variabeln total i initialiseringslistan och i variabeldeklarationen inom class.

När du använder initialiseringslistor i en konstruktor kan argumentnamnet vara detsamma som attributnamnet 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 om du använder samma namn för både medlemsvariablerna och argumenten, kommer total att ta värdet av de multiplicerade argumenten, inte medlemmarna. För att se detta, försök att sätta quantity till noll istället för argumentet.

1. Vad är en konstruktörs initialiseringslista?

2. Vilken symbol introducerar medlemsinitialiseringslistan i en konstruktör?

question mark

Vad är en konstruktörs initialiseringslista?

Select the correct answer

question mark

Vilken symbol introducerar medlemsinitialiseringslistan i en konstruktör?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 3
some-alt