E' già stato spiegato come scrivere un operatore di
assegnazione sovraccaricato e un costruttore copia per una classe.
Tuttavia, scriverli per una classe derivata richiede un leggero
lavoro ulteriore in quanto non sono ereditati dalla classe di base.
Quando si sovraccarica l'operatore di assegnazione nelle classi
derivate, di solito si richiama l'operatore di assegnazione delle
classi base, utilizzando una chiamata esplicita con il nome della
classe di base quale prefisso. Se Capo è derivato da Nemico,
la funzione dell'operatore di assegnazione definita in Capo di
solito recita:
Capo& operator=(const
Capo& b)
{ Nemico::operator=(b);
//gestisce i dati membro ereditati da Nemico
// di seguito bisogna
gestire i dati membro di Capo }
La chiamata esplicita dell'operatore di assegnazione
di Nemico gestisce i dati membro ereditati da esso. Ma il
resto della funzione deve occuparsi dei dati definiti in Capo.
Per il costruttore Copia, di solito si effettua una chiamata
al costruttore Copia della classe di base. Se Capo è
derivato da Nemico, il costruttore di copia definito in esso,
si scrive:
Capo (const Capo& b):
Nemico(b){
// si gestiscono i dati
membro definiti in Capo }
Dalla chiamata del costruttore Copia di Nemico
con Nemico(b), la copia dei
dati membro di Nemico viene messa nel nuovo oggetto Capo.
Nel resto della funzione di Capo
del costruttore copia si bada a tutti i dati membro dichiarati solo
in Capo del nuovo
oggetto.
Nessun commento:
Posta un commento