O ponteiro para a vtable é adicionado como membro para toda a "família" de classes, a base e suas herdeiras?
O ponteiro para a vtable é adicionado como membro para toda a "família" de classes, a base e suas herdeiras?
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.