Video: Nuovo Corso C++11 ITA 143: ereditarietà - classi astratte 2024
Essendo intellettualmente soddisfacente come il factoring è in C ++, introduce un problema a sé stante. In un esempio sulle classi di conti bancari, in particolare la classe di base comune Account. Pensa per un minuto a come potresti definire le diverse funzioni membro definite in Account.
La maggior parte delle funzioni dei membri Account non sono un problema poiché entrambi i tipi di account li implementano allo stesso modo. Implementare quelle funzioni comuni con Account :: prelievo () è diverso, tuttavia.
Le regole per il prelievo da un conto di risparmio sono diverse da quelle per il prelievo da un conto corrente. Dovrai implementare Risparmio:: prelievo () in modo diverso da quello che fai Verifica:: ritiro () . Ma come si dovrebbe implementare Account:: ritiro ()?
Chiediamo aiuto al direttore della banca. La conversazione potrebbe essere simile alla seguente:
"Quali sono le regole per effettuare un prelievo da un account? " tu chiedi.
"Che tipo di account? Risparmio o controllo? "Arriva la risposta.
"Da un account", dici. "Solo un account. "
Aspetto bianco.
Il problema è che la domanda non ha senso. Non esiste una cosa come "solo un account. "Tutti i conti (in questo esempio) sono conti correnti o conti di risparmio. Il concetto di un account è astratto che individua proprietà comuni alle due classi concrete.
È incompleto perché manca la proprietà critical withdraw () . (Dopo aver approfondito i dettagli, potresti trovare altre proprietà a cui manca un account semplice.)
Una classe astratta esiste solo nelle sottoclassi. Una classe di calcestruzzo è una classe che non è astratta.