• virtual si applica ai metodi; di default i metodi in C++ non sono polimorfici, diventano polimorfici solo quelli che marchi come tali (importante: ricordati sempre se hai una classe con metodi polimorfici di dichiarare un distruttore virtuale, altrimenti puoi avere problemi in caso di deallocazione tramite puntatore a classe base);
  • il polimorfismo per funzionare correttamente necessita di passare sempre per puntatori o reference, per questo motivo il tuo vettore dovrà essere di tipo classe_base* (ad esempio, std::vector<classe_base *>) e gli oggetti probabilmente andranno allocati dinamicamente. In quest'ultimo caso, uno smart pointer (std::auto_ptr in C++98/03 o std::unique_ptr in C+11) ti può risparmiare la fatica di deallocarli a mano dopo.