Non ho capito molto.
Se riscrivi una funzione (metodo) in una classe derivata, sovrascrivi (fai l'override) del metodo base, quindi il metodo base viene sostituito da quello derivato.
Se l'istanza è della base, esegui il metodo base, altrimenti quello derivato:
codice:base b; b.funzione(); // metodo base base *b = new derivata(); b.funzione(); // metodo derivata derivata d; d.funzione(); // metodo derivata