Почему требуется vptr, если производный класс не переопределяет виртуальную функцию?

class base {
public:
    void virtual fn(int i) {
        cout << "base" << endl;
    }
};

class der : public base{
    public:
    void  fn(char i) {
        cout << "der" << endl;
    }
};

int main() {

    base* p = new der;
    char i = 5;
    p->fn(i);
    cout << sizeof(base);
    return 0;
}

Здесь сигнатура функции fn, определенной в классе base, отличается от сигнатуры функции fn(), определенной в классе der, хотя имя функции одинаково. Поэтому функция, определенная в классе der, скрывает функцию класса base fn(). Поэтому версия fn класса der не может быть вызвана вызовом p->fn(i); Это нормально.

Тогда почему sizeof класса base или der равен 4, если не используется VTABLE указатель? Каково требование VTABLE-указателя здесь?

8
задан curiousguy 25 April 2016 в 21:00
поделиться