Solitamente contrassegni la classe come virtual
quando, oltre ad avere una sorta di implementazione (direttamente nella classe che dichiara la funzione stessa o in un figlio che eredita questa classe), vuoi che la dichiarazione stabilisca un contratto, che deve essere soddisfatte dalle implementazioni.
La dichiarazione dice fondamentalmente: Se mi dai questo set di parametri di questi tipi, mi viene garantito di restituire questo tipo di variabile (il tipo return
). Non devi preoccuparti di cosa succede all'interno della funzione stessa, ma puoi essere sicuro che se mi dai dei parametri di questo tipo, puoi essere certo che ti restituirò il tipo di ritorno.
Questa è chiamata astrazione, quando i perni dell'applicazione sono le dichiarazioni che forniscono comportamenti attesi ma non esatti. Le interfacce, o in classi C ++ che non contengono nient'altro che metodi virtuali puri, sono esattamente questo. Definiscono un contratto ma non forniscono l'implementazione.
Se vuoi testare l'unità, ciò che vuoi nel tuo codice è dipendere da nient'altro che virtual
funzioni. Puoi farlo definendo una funzione di una classe che fornisce già un comportamento come virtual
o estraendo la dichiarazione della funzione a una nuova classe che rappresenta l'interfaccia della funzione (rendendo la dichiarazione pura virtuale), che la classe iniziale erediti da questa classe astratta appena creata e quindi usa questa classe astratta appena creata per tutto il tuo progetto.