Ho letto molte persone che scrivono "esiste un tavolo virtuale per una classe che ha una funzione virtuale dichiarata".Virtual Table C++
La mia domanda è, esiste un vtable solo per una classe che ha una funzione virtuale o esiste anche per le classi derivate da quella classe.
es
class Base{
public:
virtual void print(){cout<<"Base Print\n";}
};
class Derived:public Base{
public:
void print(){cout<<"Derived print\n";}
};
//From main.cpp
Base* b = new Derived;
b->print();
Domanda: Se non ci fosse stato alcun vtable per la classe derivata "print derivata" allora l'uscita non sarebbe stato. Quindi IMO esiste un vtable per qualsiasi classe che ha dichiarato la funzione virtuale e anche nelle classi che ereditano da quella classe. È corretto ?
Per completare l'esperimento, creare la classe derivata2 che eredita da derivata e sovrascrive anche la stampa. Chiama stampa su tale istanza tramite un puntatore alla base ... – VoidPointer
Ulteriori informazioni sulla Vtable @ sotto Link: http://www.learncpp.com/cpp-tutorial/125-the-virtual-table/ –