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-указателя здесь?