Eventuali duplicati:
Private virtual method in C++C++: funzioni virtuali private vs. funzioni virtuali puri
Se ho capito bene da questo post (Private virtual method in C++), facendo una funzione virtuale in una classe base rende le classi derivate in grado di sovrascriverlo. Ma sembra che le cose si fermino qui.
Ma se la funzione virtuale della classe base è pura, forza le classi derivate a implementare la funzione. Quindi, una pura funzione virtuale (pubblica) è semplicemente un'interfaccia. Posso vedere un beneficio qui.
D'altra parte, rendendo privata una funzione virtuale di classe di base, fornisce alla classe derivata solo la possibilità di eseguire l'override della funzione, ma non vedo alcun vantaggio. È come se quella funzione privata privata non fosse nemmeno lì. La classe derivata ovviamente non conosce l'esistenza di quella funzione virtuale nella classe base perché è privata, quindi c'è qualche vantaggio nel dichiarare una funzione privata di classe base virtuale, in termini di ereditarietà o polimorfismo?
Inoltre, c'è qualche situazione in cui una classe di base dichiarerebbe una funzione "virtuale pura" e "privata"?
Grazie.
Perché dichiararlo protetto se si sa che non sarà necessario accedere al metodo di base dalle classi derivate? Puoi ignorare qualcosa senza doverlo chiamare. –
http://www.parashift.com/c++-faq-lite/private-virtuals.html – Samson
Nessun motivo * deve * essere dichiarato "protetto". Se hai bisogno di 'protected', usalo. In caso contrario, utilizzare 'private'. – juanchopanza