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;
}
aquí Firma del fn función definida en base
clase es diferente de la firma de la función fn()
definido en la clase der
embargo nombre de la función es la misma. Por lo tanto, la función definida en der
clase oculta base
clase función fn()
. Entonces la clase der
versión de fn no puede ser llamada por p->fn(i)
llamada; Está bien.¿Por qué se requiere un vptr cuando la clase derivada no anula la función virtual?
Mi punto es entonces ¿por qué sizeof
clase base
o der
es 4
si no hay uso de VTABLE puntero? ¿Cuál es el requisito de puntero VTABLE aquí?
¿Alguna vez oíste sobre la sobrecarga en C++? –
@KamilKlimek: la sobrecarga es el acto de declarar múltiples funciones con diferentes firmas. Lo que probablemente quiera decir es que está anulando (lo que significa que está reimplementando métodos en clases derivadas). –
para su información amable, estos no son función de sobrecarga. – user966379