Costruttori per classi derivate
La realizzazione di un costruttore per classi derivate non e` diversa dal solito:
Student::Student() {
/* ... */
}
Si deve pero` considerare che non si puo` accedere ai campi privati della classe
base, e non e` neanche possibile scrivere codice simile:
Student::Student() {
Person(/* ... */);
/* ... */
}
perche` quando si giunge all'interno del corpo del costruttore, l'oggetto e`
gia` stato costruito; ne esiste la possibilita` di eseguire un assegnamento
ad un attributo di tipo classe base. Come inizializzare dunque i membri ereditati?
Nuovamente la soluzione consiste nell'utilizzare la lista di inizializzazione:
Student::Student() : Person(/* ... */) {
/* ... */
}
Nel modo appena visto si chiede al compilatore di costruire e inizializzare
i membri ereditati utilizzando un certo costruttore della classe base con i
parametri attuali da noi indicati. Se nessun costruttore per la classe base
viene menzionato il compilatore richiama il costruttore di default, generando
un errore se la classe base non ne possiede uno.
Se il programmatore non specifica alcun costruttore per la classe derivata,
il compilatore ne fornisce uno di default che richiama quello di default della
classe base. Considerazioni analoghe valgono per il costruttore di copia fornito
dal compilatore (richiama quello della classe base).
|