L'ereditarietà pubblica significa che tutti i campi della classe base mantengono la visibilità dichiarata, mentre i privati significano che sono obbligati a "privato" nell'ambito della classe derivata.
Cosa si dovrebbe fare se alcuni membri del genitore (ad esempio, metodi) devono essere esposti pubblicamente?
Posso pensare a due soluzioni. L'eredità pubblica in qualche modo rompe l'incapsulamento. Inoltre, quando è necessario scoprire dove è definito il metodo foo (), è necessario esaminare una catena di classi base.
L'ereditarietà privata risolve questi problemi, ma introduce l'onere di scrivere i wrapper (più testo). Quale potrebbe essere una buona cosa nella linea di verbosità, ma rende i cambiamenti delle interfacce incredibilmente ingombranti.
Quali considerazioni mi mancano? Quali sono i vincoli sul tipo di progetto? Come scegliere tra i due (non sto nemmeno citando "protetto")?
Nota che sto prendendo di mira metodi non virtuali. Non c'è una tale discussione per i metodi virtuali (o c'è).