Please enable JavaScript.
Coggle requires JavaScript to display documents.
Herança - Coggle Diagram
Herança
Membros Protetores
Utilizado para adquirir acesso aos membros da classe base dentro da classe derivada
Logo, determina membros que podem ser acessados diretamente por métodos da prórpia classe base e métodos de classes derivadas
Mas não é acessível a membros privados dos objetos das classes derivadas
Marcados como protected
Diferença entre protected e private
Private: somente a própria classe tem acesso
Protected: própria classe e as derivadas podem acessar
Link de Exemplo:
https://i.sstatic.net/tVHSZ.png
Consequências da herança em ponteiros e referências
O ponteiro de uma classe base pode apontar para uma classe derivada mas pode apenas chamar os membros da clase base
Um ponteiro da classe base pode apenas acessar a interface pública dessa.
Os membros adicionais definidos na classe derivada são inacessíveis
Uma referência do tipo "referência para a classe base" aponta para um objeto da classe derivada, mas irá apenas endereçar as partes genéricass do objeto.
Link de um código que possui herança com ponteiros :
https://www.youtube.com/watch?v=HdEGqHo2j5o&t=498s
Definição:
Ferramente para reutilizar membros e expandi-los
Estruturas Principais : classes bases e derivadas
Classes Derivadas
Ajuda a especificar a classe base correspondente e herda os membros públicos da classe
Herança de membros privados:
Que não podem ser acessados externamente
Nem ainda em classes derivadas
Herança de membros públicos
que estão disponíveis para acesso externo
e para classes derivadas
Exemplo de foto:
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTU8UV-jInjRig3qOvHjNLATGseoIhklHYxNw&s
Relação de estar
Abstração de dados
Reusabilidade
Exemplo lúdico de herança:
https://www.google.com/url?sa=i&url=https%3A%2F%2Fwww.respondeai.com.br%2Fconteudo%2Fprogramacao%2Fc%2Fheranca%2F2577&psig=AOvVaw3_YmThhgvIht8slSXr3p0r&ust=1734036198614000&source=images&cd=vfe&opi=89978449&ved=0CBAQjRxqFwoTCIDFjrDKoIoDFQAAAAAdAAAAABAE
Conversão de tipos e Herança
Conversão implícita é adequada se derivada de uma classe base
é permitido que um objeto de uma classe derivada seja tratado como um objeto de classe base, de forma implícita- sem ter o casting explícito
Uma classe derivada herda todas as características da classe base
Nem tudo o que a classe possui é o que a classe derivada precisa
https://www.scaler.com/topics/cpp/type-conversions-in-class-hierarchies/
Link da imagem -> item 1 do item assignments
Métodos de Acesso
Como ocorre?
1) O compilador procura pelo nome do méetodo chamado na classe derivada
2) Caso o nome não seja encontrado, o compilador tenta procurar por um método público com aquele nome numa visão mais externa da árvore
3) A pessoa tem o acesso para o método original da classe base, redefiida com o operador ::
Regras de redefinição de nomenclatura
Se o nome não aparece na classe base
Sem redefinição
Se o nome ainda existir na classe base
Há a redefinição de nome
Upcast x Downcast
Upcast é feito de forma implicita - conversão de tipos que sobem a hierarquia da classe
Possível e seguro
Downcast é feito de forma explícita - conversão de tipos que pode ser feita descendo uma árvore
Tem que fazer casting construction
Link para imagem que tem exemplo de Downcast :
https://www.facebook.com/abdirisakcc/posts/c-program-illustrates-how-explicit-type-conversion-workswhen-converting-a-floati/788864078574355/
Construtores e Destrutores
Forma mais otimizada de fazer herança ->
inicializa todos os membros diretamente na lista de incialização
Num exemplo de código em que Vehicle fosse a classe base ( com vNumber e manufacturer) e Motorcycle a derivada ( adicionando model e hasSideCar)
Fazendo um consstrutor dessa classe, é muito mais otimizado e eficiente fazer uma lista de inicialização
Motorcycle ( int Vnum , const string& manufacturer , const string& mod, bool sidecar) : Vehicle ( vNum, manufacturer), model (mod), hasSideCar ( sidecar)