Herança múltipla, multinível e hierárquica C ++

Neste artigo, você aprenderá sobre diferentes modelos de herança na programação C ++: herança múltipla, multinível e hierárquica com exemplos.

Herança é um dos principais recursos de uma linguagem de programação orientada a objetos. Ele permite que os desenvolvedores de software derivem uma nova classe da classe existente. A classe derivada herda os recursos da classe base (classe existente).

Existem vários modelos de herança na programação C ++.

Herança multinível C ++

Na programação C ++, você não só pode derivar uma classe da classe base, mas também pode derivar uma classe da classe derivada. Essa forma de herança é conhecida como herança multinível.

classe A (… ); classe B: público A (…); classe C: público B (………);

Aqui, a classe B é derivada da classe base A e a classe C é derivada da classe derivada B.

Exemplo 1: herança multinível C ++

 #include using namespace std; class A ( public: void display() ( cout<<"Base class content."; ) ); class B : public A ( ); class C : public B ( ); int main() ( C obj; obj.display(); return 0; )

Resultado

 Conteúdo da classe base.

Neste programa, a classe C é derivada da classe B (que é derivada da classe base A).

O objeto obj da classe C é definido na main()função.

Quando a display()função é chamada, display()na classe A é executada. É porque não há display()função nas classes C e B.

O compilador primeiro procura a display()função na classe C. Como a função não existe lá, ele procura a função na classe B (já que C é derivado de B).

A função também não existe na classe B, portanto, o compilador a procura na classe A (já que B é derivado de A).

Se a display()função existe em C, o compilador substitui a display()classe A (por causa da substituição da função de membro).

Herança Múltipla C ++

Na programação C ++, uma classe pode ser derivada de mais de um pai. Por exemplo: Uma classe Morcego é derivada das classes básicas Mamífero e Animal Alado. Faz sentido porque o morcego é um mamífero e também um animal alado.

Exemplo 2: herança múltipla em programação C ++

 #include using namespace std; class Mammal ( public: Mammal() ( cout << "Mammals can give direct birth." << endl; ) ); class WingedAnimal ( public: WingedAnimal() ( cout << "Winged animal can flap." << endl; ) ); class Bat: public Mammal, public WingedAnimal ( ); int main() ( Bat b1; return 0; ) 

Resultado

Os mamíferos podem dar à luz diretamente. Animais alados podem bater as asas.

Ambiguidade em herança múltipla

O problema mais óbvio com herança múltipla ocorre durante a substituição de função.

Suponha que duas classes básicas tenham a mesma função que não é substituída na classe derivada.

Se você tentar chamar a função usando o objeto da classe derivada, o compilador mostrará erro. É porque o compilador não sabe qual função chamar. Por exemplo,

 class base1 ( public: void someFunction( ) (… .… … . ) ); class base2 ( void someFunction( ) (… .… … . ) ); class derived : public base1, public base2 ( ); int main() ( derived obj; obj.someFunction() // Error! )  

Este problema pode ser resolvido usando a função de resolução de escopo para especificar qual função classificar base1 ou base2

 int main () (obj.base1 :: someFunction (); // A função da classe base1 é chamada obj.base2 :: someFunction (); // A função da classe base2 é chamada.)

Herança hierárquica C ++

Se mais de uma classe é herdada da classe base, isso é conhecido como herança hierárquica. Na herança hierárquica, todos os recursos comuns nas classes filhas são incluídos na classe base.

Por exemplo: Física, Química e Biologia são derivados da aula de Ciências.

Sintaxe de herança hierárquica

 class base_class (…) class first_derived_class: public base_class (…) class second_derived_class: public base_class (…) class third_derived_class: public base_class (…)

Artigos interessantes...