「仮想関数が宣言されたクラスには仮想テーブルが存在する」と書いている人をたくさん読んでいます。
私の質問は、vtableは仮想関数を持つクラスにのみ存在するのか、それともそのクラスから派生したクラスにも存在するのかということです。
例えば
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();
質問:派生したクラスのvtableがなかった場合、出力は「派生した印刷」ではなかったでしょう。したがって、IMOには、仮想関数が宣言されているクラスと、そのクラスから継承するクラスのvtableが存在します。これは正しいです ?