Please enable JavaScript.
Coggle requires JavaScript to display documents.
Implicit Conversion em Hierarquias de Classes, Problema: Gerenciamento de…
Implicit Conversion em Hierarquias de Classes
Conceitos Gerais
Herança Pública:
A classe derivada assume as características da classe base.
Exemplo: PassCar e Truck derivam de Car.
Relação "is": A classe derivada é um tipo especial da classe base.
Objetos de classes derivadas podem ser convertidos implicitamente para objetos da classe base.
Conversão em Atribuições
Apenas os membros da classe base são copiados.
Membros adicionais da classe derivada não são copiados.
Conversão em Ponteiros e Referências
Ponteiro para Classe Base:
Apenas os métodos e membros da classe base estão acessíveis.
Upcast e Downcast
Upcast (Seguro e Implícito):
Conversão de classe derivada → classe base.
Downcast (Explícito e Perigoso):
Conversão de classe base → classe derivada.
Riscos:
A conversão downcast só é segura se o objeto realmente for do tipo da classe derivada.
Uso de dynamic_cast (para classes polimórficas) torna o processo mais seguro.
Problema: Gerenciamento de Objetos em Hierarquias de Classes
Quando usamos ponteiros ou referências para a classe base, somente os membros comuns da classe base podem ser acessados.
Para acessar membros específicos de classes derivadas dinamicamente, a solução é polimorfismo.
Abordagens
Abordagem Tradicional
Uso de um campo de tipo para identificar o tipo de objeto.
Requer um switch para chamar o método correto.
Desvantagem: toda adição de uma classe derivada requer a modificação e recompilação do código.
Abordagem Orientada a Objetos (Polimorfismo)
Uso de métodos virtuais.
Métodos declarados com a palavra-chave virtual no C++ permitem ligação dinâmica.
A chamada ao método adequado é determinada em tempo de execução.
MÉTODOS VIRTUAIS
Declarados com virtual no cabeçalho da classe base.
Classes derivadas podem redefinir o método virtual com a mesma assinatura.
Características Importantes:
Regras: mesma assinatura e mesmo tipo de retorno.
Métodos redefinidos na classe derivada também são virtual automaticamente.
Destrutores devem ser declarados virtual para evitar vazamento de memória.
Não é possível declarar um construtor como virtual.
VMT (Virtual Method Table)
Cada classe com métodos virtuais possui uma tabela de métodos virtuais (VMT).
A VMT armazena os endereços dos métodos virtuais.
Cada objeto em classes polimórficas possui um ponteiro oculto para a VMT.
Ligação Dinâmica:
Determina o método a ser chamado em tempo de execução.
Passos:
O ponteiro da VMT no objeto é lido.
O endereço do método correto é recuperado da VMT.