Contenuti del Corso
OOP in C++
OOP in C++
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
class 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
#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
#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!