Please enable JavaScript.
Coggle requires JavaScript to display documents.
Herança - Coggle Diagram
Herança
Criação de classes a partir de outras
Classe Base
Contém as informações que serão herdadas
evita redundância e aumenta a abstração dos dados
garante consistência no comportamento das classes derivadas a ela
membros publicos e privados
membros privados
não pode ser acessado pelas classes derivadas
membros públicos
pode ser acessado externamente
membros protegidos
uso exclusivo em herança
membros que só podem ser acessados pelas classes derivadas
classes externas não têm acesso as informações protegidas
acesso controlado
permite reutilização dos códigos
aumentam a eficiência, facilita manutenção e modificações futuras
Classe Derivada
herda todas as informações da classe base
pode adicionar novos atributos exclusivos sem alterar a classe base
melhora a organização do código
facilita a manutenção e capacidade de expansão do código
não tem acesso direto aos membros privados da classe base
construtor
sempre é chamado depois do da classe base
o construtor base pode ser implicito ou explicito
chamada explicita
PassCar::PassCar(const string& tp, bool sr, int n,
const string& hs) : Car( n, hs)
destrutor
libera os recursos alocados pela classe derivada
chama automaticamente o construtor da base
chamada obrigatoriamente implicita
é chamado antes do destrutor base
ponteiros e referências
essencial para o poliformismo
ponteiros
ponteiros da classe base podem apontar para a classe derivada
essencial para o upcasting
o oposto só é permitido se o objeto da classe derivada também for objeto da classe base
necessita de validação explícita
permitem alocação dinâmica
controle mais explícito
necessitam de mais cuidados na hora de manipular
referências
uso mais seguro que os ponteiros
sempre referenciam um objeto valido
não podem ser nulas
uteis para passar objetos sem criar copias
conversão de tipos e heranças
downcasting
conversão explicita
conversão da classe base para a derivada
menos segura
alto risco de erros e comportamentos indefinidos
deve ser feita manualmente, o compilador não executa de maneira automática
upcasting
conversão pode ser implicita
da classe derivada para a classe base
a classe derivada contem todas as informações da classe base
"perda de informações" de maneira controlada
limita o acesso a membros específicos
as informações ainda estão presentes na classe derivada