Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Linguagem C

Modelos de Herança em C++: Múltipla, Multinível e Hierárquica

Modelos de Herança em C++: Múltipla, Multinível e Hierárquica

Neste tutorial, exploramos padrões de herança em C++ — múltipla, multinível e hierárquica — com exemplos práticos de código.

Herança é uma característica fundamental da programação orientada a objetos. Ela permite que desenvolvedores criem novas classes que herdam propriedades e comportamento de existentes.

Abaixo examinamos três modelos-chave de herança disponíveis em C++.


Herança Multinível em C++

Em uma hierarquia multinível, uma classe deriva de outra classe derivada. A cadeia continua até que uma classe base seja alcançada.

 class A { // Implementação da classe base }; class B : public A { // B herda de A }; class C : public B { // C herda de B }; 

Aqui, B herda de A, e C herda de B, formando uma cadeia de herança vertical.

Exemplo 1: Herança Multinível em C++

 #include <iostream> using namespace std; class A { public: void display() { cout << "Conteúdo da classe base." << endl; } }; class B : public A {}; class C : public B {}; int main() { C obj; obj.display(); return 0; }  

Saída

Conteúdo da classe base.

Este programa demonstra que um objeto de C pode invocar display() definido na classe base final A porque não existe implementação de sobrescrita em B ou C. O compilador resolve a chamada pesquisando a cadeia de herança da classe mais derivada para cima.


Herança Múltipla em C++

C++ permite que uma classe herde de mais de uma classe base. Por exemplo, um Morcego pode derivar de ambos Mamifero e AnimalAlado porque um morcego é simultaneamente um mamífero e uma criatura alada.

Modelos de Herança em C++: Múltipla, Multinível e Hierárquica

Exemplo 2: Herança Múltipla em C++

 #include <iostream> using namespace std; class Mamifero { public: Mamifero() { cout << "Mamíferos podem dar à luz diretamente." << endl; } }; class AnimalAlado { public: AnimalAlado() { cout << "Animais alados podem bater asas." << endl; } }; class Morcego : public Mamifero, public AnimalAlado {}; int main() { Morcego b1; return 0; }  

Saída

Mamíferos podem dar à luz diretamente. Animais alados podem bater asas.

Resolvendo Ambiguidade na Herança Múltipla

Quando duas classes base fornecem uma função com o mesmo nome, o compilador não consegue decidir qual invocar, levando a um erro de ambiguidade.

 class Base1 { public: void someFunction() { /* ... */ } }; class Base2 { public: void someFunction() { /* ... */ } }; class Derived : public Base1, public Base2 {}; int main() { Derived obj; // obj.someFunction(); // Erro: ambíguo }  

Use o operador de resolução de escopo para especificar a função da classe base desejada:

 int main() { Derived obj; obj.Base1::someFunction(); // Chama implementação de Base1 obj.Base2::someFunction(); // Chama implementação de Base2 } 

Herança Hierárquica em C++

Na herança hierárquica, várias classes derivadas herdam de uma única classe base. Todos os atributos e comportamentos comuns são encapsulados na classe base, enquanto cada classe derivada pode adicionar sua própria especialização.

Exemplos incluem Fisica, Quimica e Biologia derivando de Ciencia; e Cachorro, Gato, Cavalo derivando de Animal.

Sintaxe da Herança Hierárquica

 class BaseClass { // Conteúdo da classe base }; class DerivedOne : public BaseClass { // Membros adicionais }; class DerivedTwo : public BaseClass { // Membros adicionais }; class DerivedThree : public BaseClass { // Membros adicionais }; 

Exemplo 3: Herança Hierárquica em C++

 // Programa C++ demonstrando herança hierárquica #include <iostream> using namespace std; // Classe base class Animal { public: void info() { cout << "Eu sou um animal." << endl; } }; // Classe derivada 1 class Dog : public Animal { public: void bark() { cout << "Eu sou um Cachorro. Au au." << endl; } }; // Classe derivada 2 class Cat : public Animal { public: void meow() { cout << "Eu sou um Gato. Miau." << endl; } }; int main() { // Instância Dog Dog dog1; cout << "Classe Dog:" << endl; dog1.info(); dog1.bark(); // Instância Cat Cat cat1; cout << "\nClasse Cat:" << endl; cat1.info(); cat1.meow(); return 0; }  

Saída

Classe Dog: Eu sou um animal. Eu sou um Cachorro. Au au. Classe Cat: Eu sou um animal. Eu sou um Gato. Miau.

Tanto Dog quanto Cat herdam o método info() de Animal, enquanto cada classe introduz seu próprio comportamento especializado.


Linguagem C

  1. Classes e Objetos em C#: Fundamentos para POO Robusta
  2. Dominando Classes e Métodos Abstratos em C#: Guia Prático
  3. Entendendo Classes e Métodos Parciais em C#
  4. Dominando Classes e Métodos Sealed em C#: Quando Usar, Exemplos Claros e Segurança de Código
  5. Classes e Objetos em C++: Guia Prático de Programação Orientada a Objetos
  6. Dominando Herança em C++: Public, Protected & Private Explicados
  7. Funções Amigas e Classes Amigas em C++: Dominando o Controle de Acesso
  8. C++ Struct vs Class: Diferenças Principais, Sintaxe e Melhores Casos de Uso
  9. Entendendo Classes de Armazenamento em C++: Escopo, Tempo de Vida e Uso
  10. Guia Completo de Data e Hora em C++