1
resposta

[Dúvida] ponteiro para vtable das classes que herdam

O ponteiro para a vtable é adicionado como membro para toda a "família" de classes, a base e suas herdeiras?

1 resposta

Ola

Sim, toda vez que você cria um objeto de uma classe que tem métodos virtuais, esse objeto recebe automaticamente um ponteiro especial chamado vptr. Esse ponteiro serve para "apontar" para uma tabela de métodos chamada vtable.

Essa tabela (vtable) guarda os endereços dos métodos virtuais da classe. E o vptr sempre aponta para a vtable da classe real do objeto.

Por exemplo:

Se você tem uma classe Animal com um método virtual, e depois cria uma classe Cachorro que herda de Animal, cada objeto criado seja de Animal ou de Cachorro vai ter seu próprio vptr. No caso do Cachorro, esse vptr vai apontar para a vtable da classe Cachorro, que pode ter métodos diferentes dos de Animal, caso tenham sido sobrescritos.