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
1234567class 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
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; }
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
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?
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Awesome!
Completion rate improved to 3.13
Konstruktörinitialiseringslista
Svep för att visa menyn
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
1234567class 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
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; }
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
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?
Tack för dina kommentarer!