Il modo da te utilizzato è corretto.. quindi il problema è a monte.. dichiarazione della classe, override ecc..

Provato a stampare un oggetto della classe derivata senza cicli vari? Secondo me chiama la stampa di base.. Perchè? Perchè non riconosce l'override della stampa..

Se invece la stampa è corretta allora il problema è l'utilizzo errato della parola "virtual"..