No, perchè base::funzione() non è dichiarato virtual.
Se il metodo nella base è dichiarato virtual allora viene cercato il metodo con lo stesso nome più in giù nella gerarchia (il primo che non è dichiarato virtual), altrimenti, viene eseguito proprio il metodo chiamato.
Dichiaralo come
e andrà ad eseguire quello della classe derivata.codice:virtual void funzione()