Lista di Inizializzazione del Costruttore
Una lista di inizializzazione consente ai costruttori di inizializzare i membri della classe prima dell'esecuzione del 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.
-
:(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, 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; }
Provare 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, il totale assumerà il valore dei parametri moltiplicati, non dei membri. Per verificarlo, prova a impostare quantity a zero invece che all'argomento.
1. Che 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
Fantastico!
Completion tasso migliorato a 3.13
Lista di Inizializzazione del Costruttore
Scorri per mostrare il menu
Una lista di inizializzazione consente ai costruttori di inizializzare i membri della classe prima dell'esecuzione del 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.
-
:(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, 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; }
Provare 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, il totale assumerà il valore dei parametri moltiplicati, non dei membri. Per verificarlo, prova a impostare quantity a zero invece che all'argomento.
1. Che 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!