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

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

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


Neste tutorial, aprenderemos sobre diferentes modelos de herança em programação C++:herança múltipla, multinível e hierárquica com exemplos.

A herança é um dos principais recursos de uma linguagem de programação orientada a objetos. Ele permite que os desenvolvedores de software obtenham 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++, não apenas você 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.
class A { 
... .. ... 
};
class B: public A {
... .. ...
};
class C: public B {
... ... ...
};

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

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

#include <iostream>
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;
}

Saída
Base class content.



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

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

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

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

A função também não existe na classe B , então o compilador o procura na classe A (como B é derivado de A ).

Se display() função existe em C , o compilador substitui display() da 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, classe A Bat é derivado das classes base 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 na programação C++

#include <iostream>
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;
}

Saída
Mammals can give direct birth.
Winged animal can flap.

Ambiguidade na 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 base tenham uma mesma função que não seja 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( );  // Function of base1 class is called
    obj.base2::someFunction();   // Function of base2 class is called.
}

Herança hierárquica C++


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

Por exemplo, Física, Química, Biologia são derivadas da aula de Ciências. Da mesma forma, Cão, Gato, Cavalo são derivados da classe Animal.

Sintaxe da 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 {
     ... .. ...
}

Exemplo 3:Herança hierárquica na programação C++

// C++ program to demonstrate hierarchical inheritance

#include <iostream>
using namespace std;

// base class
class Animal {
   public:
    void info() {
        cout << "I am an animal." << endl;
    }
};

// derived class 1
class Dog : public Animal {
   public:
    void bark() {
        cout << "I am a Dog. Woof woof." << endl;
    }
};

// derived class 2
class Cat : public Animal {
   public:
    void meow() {
        cout << "I am a Cat. Meow." << endl;
    }
};

int main() {
    // Create object of Dog class
    Dog dog1;
    cout << "Dog Class:" << endl;
    dog1.info();  // Parent Class function
    dog1.bark();

    // Create object of Cat class
    Cat cat1;
    cout << "\nCat Class:" << endl;
    cat1.info();  // Parent Class function
    cat1.meow();

    return 0;
}

Saída
Dog Class:
I am an animal.
I am a Dog. Woof woof.

Cat Class:
I am an animal.
I am a Cat. Meow.

Aqui, tanto o Dog e Cat classes são derivadas do Animal classe. Assim, ambas as classes derivadas podem acessar o info() função pertencente ao Animal classe.

Linguagem C

  1. Classe e objeto C#
  2. Classe abstrata e método C#
  3. C# Classe Parcial e Método Parcial
  4. Classe e método selados em C#
  5. Classes e objetos C++
  6. Herança pública, protegida e privada C++
  7. Função de amigo C++ e classes de amigo
  8. Diferença entre estrutura e classe:explicada com exemplo de C++
  9. Classes de armazenamento em C++
  10. Data e hora do C++