C ++ Heritância múltipla

C ++ Heritância múltipla
Herança é o processo de melhorar e estender as classes existentes sem causar nenhuma mudança nelas. Isso causa uma relação hierárquica entre as classes. A herança na linguagem de programação C ++ é derivada em 5 tipos principais. Que são:
  • Herança única
  • Herança múltipla
  • Herança hierárquica
  • Herança multinível
  • Herança híbrida

Aqui, nosso tópico de discussão é várias heranças.

Múltiplas heranças

A herança múltipla ocorre quando mais de uma classe opera como uma classe pai. Na linguagem de programação C ++, podemos derivar uma classe da classe base, mas também podemos derivar uma classe dessas classes que também são derivadas de outra classe base. Chamamos esse tipo de herança múltipla de herança. Durante esse processo, algumas questões também ocorrem; estes são explicados mais adiante no guia.

Propósito de herança

A herança é uma das abordagens úteis e importantes da OOP (programação orientada a objetos). O principal objetivo do uso da herança em OOP ou C ++ é permitir ao usuário reutilizar o código-fonte. Em vez de escrever o mesmo código várias vezes, podemos simplesmente usar a herança para herdar as propriedades de uma classe base para a classe infantil. Isso também reduz a complexidade do código -fonte.

A sintaxe para várias heranças é:

classe 1
;
Classe 2: Public 1
;
Classe 3: Public 2
;

Para herdar qualquer aula, o nome da classe infantil é escrito no lado esquerdo, enquanto a classe dos pais é escrita no lado direito, e isso é separado por um cólon. Na sintaxe acima, a classe 2 é derivada da classe 1 e a classe 3 é derivada da classe 2.

Implementação de herança múltipla

Exemplo 1

Este exemplo é um uso de amostra de herança, pois múltiplas heranças contêm uma criança com dois pais. Então, aqui, a classe C é uma classe infantil, enquanto as classes de classe A e Classe B são pais. Cada classe inclui um construtor que exibirá uma mensagem sempre que o objeto de classe for criado. Usando a biblioteca iostream ajuda a declarar CIN, cout funcionalidades. Ambas as classes pais são declaradas de qualquer maneira, mas, ao declarar a classe infantil, precisamos mencionar as duas classes de pais herdadas da classe infantil. Aqui a ordem de ambas as classes deve ser lembrada. A classe que é declarada primeiro deve ser mencionada por último.

Por exemplo, no exemplo dado, a classe A é criada primeiro no código -fonte a ser mencionado após B, e a classe B será mencionada primeiro.

Classe C: Public B, Public A

Criaremos um objeto apenas para a classe infantil no programa principal, como no processo de herança, o objeto de classe infantil acessa automaticamente a classe pai. Agora salve o arquivo com o '.C 'Extensão, compilar o código através de um compilador G ++. '-o' é utilizado para salvar a saída do arquivo.

$ g ++ -o multi -multi.c
$ ./multi

Na execução bem -sucedida, a resposta será exibida. Você pode ver que o construtor da classe B será executado primeiro apenas por causa da ordem necessária, embora tenha sido declarada mais tarde, então o construtor da classe A é executado e, no final, a própria classe infantil é executada.

Exemplo 2

Aqui está um exemplo de herança múltipla em que uma 'boneca de classe infantil contém dois pais, um brinquedo e um pluguel. Essas classes são declaradas da mesma maneira que fizemos no último exemplo. Cada construtor é criado para as duas classes pais. A terceira classe, a classe infantil, é declarada apenas, mas seu construtor não é criado; Existe apenas uma declaração. Aqui, a ordem para a declaração da classe dos pais é alterada, pois o brinquedo da classe é declarado primeiro, deve ser mencionado mais tarde, mas no momento da declaração da classe infantil, é mencionado primeiro; Da mesma forma, a classe Plushtoy é declarada mais tarde também mencionada após o brinquedo da classe.

Ao criar o objeto, os construtores da classe pai serão executados dependendo da ordem mencionada ao declarar a classe infantil.

Agora execute o código; Você verá que o construtor do brinquedo pai é executado primeiro e, em seguida, o construtor da classe “Plushtoy” é executado.

Exemplo 3

Um problema de diamante ocorre na situação em que dois pais (superclasse) têm uma classe base comum. Por exemplo, a criança C tem dois pais, A e B, e ambos pertencem a uma única classe base D. Portanto, a Classe C infantil co conterá indiretamente duas cópias da Classe D, o que leva à ambiguidade. Este problema é explicado via código fonte C ++.

Uma pessoa de classe é criada como uma classe base e tem um construtor para exibir uma mensagem. Outra faculdade de classe é criada que é um filho da classe base 'pessoa' e tem um construtor na parte pública da classe. Como o corpo docente, também é criado um aluno da turma que herda da pessoa da classe base dos pais.

Professores e alunos se tornam pais superclasse em ambas as aulas quando uma aula AT é derivada deles. Esta classe infantil TA é declarada com os nomes de ambas as classes de pais.

Aula TA: Faculdade Pública: Público Estudante

Isso forma um diamante; Duas classes herdam uma única classe, enquanto uma única classe é herdada dessas duas classes. Assim indiretamente, a classe infantil conterá dados da classe base de seus pais.

A criação de objetos iniciará todos os construtores das classes descritas acima.

Quando o programa for executado, você verá que o construtor da classe do corpo docente será executado primeiro, pois a ordem foi mencionada primeiro ao declarar uma classe infantil. Portanto, a aula do corpo docente exibirá primeiro a mensagem da classe Person e, em seguida, sua mensagem; Da mesma forma, a aula do aluno imprimirá novamente a aula da pessoa e depois sua mensagem. E no final, a mensagem da classe infantil é exibida.

Se algum processo ou operação for declarado na classe base, ele será copiado duas vezes. Isso vai causar ambiguidade.

Para remover este problema, há uma solução. A palavra -chave 'virtual' é usada neste aspecto. Usando a palavra -chave virtual com a classe pai, o corpo docente e o aluno evitará a criação de duas cópias de uma classe base. Isso é aplicado a um exemplo exibido abaixo.

O código restante é o mesmo. Isso funcionará para que o construtor de classe base (pessoa) seja chamado por padrão quando o objeto é criado. Isso eliminará a duplicação da mesma mensagem ou de qualquer operação.

Agora vamos executar o código para ver os resultados. O construtor da classe base é executado apenas uma vez.

Conclusão

'Herança múltipla C ++' contém a explicação básica de herança e a inclui no código. Alguns exemplos elementares são implementados em C ++ para explicar o funcionamento de múltiplas heranças. Este guia vem com alguns problemas importantes de herança, como o problema do diamante. É elaborado em detalhes, e também a solução para ele também é destacada. Felizmente, esse esforço será uma fonte de conhecimento completo para os novos usuários.