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 (…)