Please enable JavaScript.
Coggle requires JavaScript to display documents.
Herança - Coggle Diagram
Herança
Conversão de tipo
Quando atribuímos um objeto de classe derivada a um objeto de classe base há uma conversão de tipo implícita, afinal ele também é um tipo especial da classe base.
Conversão de tipo implícita entre classes hierarquizadas ocorrem em atribuições para objetos de classe tipo base e ponteiros ou referências a classe base.
Acontecem também na chamada de funções, além de atribuições
Conversão objeto de classe derivada -> obj de classe base significa que o obj da classe base só vai manter os dados que eles compartilham entre si (públicos da base).
O contrário dá um erro, por que temos espaços na classe derivada que a classe base não preenche. É só possível se um copy constructor ou type conversion function foram definidos.
Um ponteiro para a classe base pode referir a um objeto de uma classe derivada, mas só acessa os membros que são comuns entre eles.
-
Upcasts e Downcasts
Upcasts são conversões de tipo que "sobem" a hierarquia de classes, ou seja, classe derivada a uma base e sempre são seguras e possíveis
Downcasts são o oposto de Upcasts e podem ser performadas somente explicitamente com um cast construction
-
Vantagens
Abstração de dados
Traços mais gerais podem ser responsabilidade de classes mais genéricas (bases) enquanto especialidades podem ser organizadas em classes derivadas.
Reusabilidade
Classes definidas e testas podem ser base e reutilizadas e adaptadas a fazer novas ações em classes derivadas.
Classes derivadas
-
O programa vai chamar primeiro o construtor da classe base e depois o da classe derivada, construindo o objeto de dentro para fora.
-
Destruir é o oposto, com o destructor da classe derivada sendo chamado primeiro e depois o da base.
Permite que nova classes sejam construídas com base em classes já existentes, a nova classe se chama DERIVADA e "herda" os dados e métodos da classe chamada BASE.
Um objeto de uma classe derivada é um tipo especial de objeto da classe base. Tal objeto portanto tem uma relação de is (SER) da classe base, ao invés de has (TER) em que uma classe contém um membro que tem outro tipo de classe.
Declarações protegidas
Um membro declarado protected é protegido de acesso externo assim como um membro privado, mas é acessível a métodos e friend functions de classes derivadas.