Lista di Inizializzazione del Costruttore
Una lista di inizializzazione permette ai costruttori di inizializzare i membri della classe prima che venga eseguito il corpo del costruttore. È particolarmente utile per inizializzazioni complesse o quando si lavora con oggetti di classi che hanno membri const
.
Sintassi della Lista di Inizializzazione
La sintassi delle liste di inizializzazione può sembrare eccessivamente complessa e confusa. Si potrebbe pensare di utilizzare solo un costruttore come alternativa più semplice. Tuttavia, man mano che il programma cresce, le liste di inizializzazione si dimostrano comode e semplici da utilizzare.
-
:
(simbolo due punti): introduce la lista di inizializzazione dei membri in un costruttore; -
member (value): una variabile membro della classe che viene inizializzata con il valore (argomento passato al costruttore);
-
{ }
(parentesi graffe): il corpo del costruttore, dove è possibile eseguire codice aggiuntivo dopo l'inizializzazione dei membri.
temperature_sensor.h
1234567class TemperatureSensor { public: TemperatureSensor(int initialTemperature) : currentTemperature(initialTemperature) {} int currentTemperature; };
Limitazioni e Considerazioni
Esiste un malinteso comune riguardo l'ordine di inizializzazione nella lista di inizializzazione. Contrariamente a quanto si crede, l'inizializzazione delle variabili nella lista di inizializzazione non segue l'ordine in cui sono scritte. Invece, è determinato dall'ordine di dichiarazione dei membri nella classe, e non dalla sequenza nella lista di inizializzazione.
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; }
Prova a modificare la sequenza di inizializzazione della variabile total
nella lista di inizializzazione e nella dichiarazione della variabile all'interno della class
.
Quando si utilizzano le liste di inizializzazione in un costruttore, l'argomento può avere lo stesso nome dell'attributo della 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; }
Ma se si utilizza lo stesso nome sia per le variabili membro che per gli argomenti, total assumerà il valore dei parametri moltiplicati, non dei membri. Per verificarlo, prova a impostare quantity a zero invece che all'argomento.
1. Cos'è una lista di inizializzazione del costruttore?
2. Quale simbolo introduce la lista di inizializzazione dei membri in un costruttore?
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Awesome!
Completion rate improved to 3.13
Lista di Inizializzazione del Costruttore
Scorri per mostrare il menu
Una lista di inizializzazione permette ai costruttori di inizializzare i membri della classe prima che venga eseguito il corpo del costruttore. È particolarmente utile per inizializzazioni complesse o quando si lavora con oggetti di classi che hanno membri const
.
Sintassi della Lista di Inizializzazione
La sintassi delle liste di inizializzazione può sembrare eccessivamente complessa e confusa. Si potrebbe pensare di utilizzare solo un costruttore come alternativa più semplice. Tuttavia, man mano che il programma cresce, le liste di inizializzazione si dimostrano comode e semplici da utilizzare.
-
:
(simbolo due punti): introduce la lista di inizializzazione dei membri in un costruttore; -
member (value): una variabile membro della classe che viene inizializzata con il valore (argomento passato al costruttore);
-
{ }
(parentesi graffe): il corpo del costruttore, dove è possibile eseguire codice aggiuntivo dopo l'inizializzazione dei membri.
temperature_sensor.h
1234567class TemperatureSensor { public: TemperatureSensor(int initialTemperature) : currentTemperature(initialTemperature) {} int currentTemperature; };
Limitazioni e Considerazioni
Esiste un malinteso comune riguardo l'ordine di inizializzazione nella lista di inizializzazione. Contrariamente a quanto si crede, l'inizializzazione delle variabili nella lista di inizializzazione non segue l'ordine in cui sono scritte. Invece, è determinato dall'ordine di dichiarazione dei membri nella classe, e non dalla sequenza nella lista di inizializzazione.
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; }
Prova a modificare la sequenza di inizializzazione della variabile total
nella lista di inizializzazione e nella dichiarazione della variabile all'interno della class
.
Quando si utilizzano le liste di inizializzazione in un costruttore, l'argomento può avere lo stesso nome dell'attributo della 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; }
Ma se si utilizza lo stesso nome sia per le variabili membro che per gli argomenti, total assumerà il valore dei parametri moltiplicati, non dei membri. Per verificarlo, prova a impostare quantity a zero invece che all'argomento.
1. Cos'è una lista di inizializzazione del costruttore?
2. Quale simbolo introduce la lista di inizializzazione dei membri in un costruttore?
Grazie per i tuoi commenti!