Tudo que você precisa saber sobre herança em C ++



Este artigo fornecerá a você um conhecimento detalhado e abrangente da Herança em C ++, seus vários tipos e como implementá-la.

C ++ é uma linguagem orientada a objetos. Abstração de dados, polimorfismo, encapsulamento e herança são os pilares da OOP. Nesse post, vamos entender o que é herança? Tipos de herança em C ++ e todos os conceitos necessários relacionados a ela desde o início. No final, também examinaremos a desvantagem desse conceito poderoso e tentaremos resolvê-lo.

O que é herança em C ++

Herança é um dos conceitos mais poderosos e amplamente usados ​​em C ++ ou qualquer outra linguagem orientada a objetos. Compreender esse conceito requer um pouco de conhecimento de classes e objetos. Usando Herança, podemos criar uma classe que consiste em métodos e atributos gerais. Essa classe pode ser herdada por outras classes contendo métodos mais específicos.





Herança em C ++

Ao fazer isso, não temos que escrever as mesmas funcionalidades repetidamente, o que economiza tempo e aumenta a legibilidade do código.



Sintaxe:

classe derivados_class: access_type base_class {// corpo da classe}

Classe base: A classe que consiste em todos os métodos e atributos gerais que podem ser compartilhados por outras classes para aumentar a legibilidade do código é chamada de classe base.

Classe derivada: A classe que consiste em métodos mais específicos e herda uma classe é chamada de classe derivada. Uma classe derivada também pode ser uma classe base para alguma outra classe derivada.



Se criarmos uma classe XYZ, com alguns atributos e métodos. Agora, um aluno da classe terá alguns outros atributos, mas também incluirá os elementos da classe XYZ e o mesmo vale para uma classe do corpo docente. Vamos ver um diagrama:

Portanto, o aluno e a classe do corpo docente herdarão de XYZ.

Especificador de acesso- Nós entendemos como uma classe pode herdar outra classe. Mas algumas pessoas podem dizer que é um método inseguro, pois todos os atributos e métodos da classe base ou da classe pai são compartilhados com a classe filha ou a classe derivada. Por exemplo, se uma classe ‘Banco’ é herdada pela classe ‘clientes’ e ‘investidores’. Atributos da classe ‘Banco’, como ‘senha do cofre’, outras informações relacionadas ao cliente e dados privados são compartilhados com os ‘clientes’ e a classe ‘investidores’, que não é segura.

Para resolver o problema acima, C ++ usa especificadores de acesso para limitar o acesso dos atributos da classe base à classe derivada. Há um total de 3 tipos de especificadores de acesso em C ++

  1. Público
  2. Privado
  3. Protegido

A tabela a seguir lhe dará uma boa compreensão de quais tipos de dados podem ser acessados ​​por classe derivada de acordo com diferentes especificadores de acesso.

Especificador de acesso Dados Públicos Dados Privados Dados protegidos
Privado Não herdadoNão herdadoNão herdado
Protegido Protegido Privado Protegido
Público Público Privado Protegido

Herança Única

Herança única pode ser considerada como a forma de herança simples. Na herança única, uma única classe herda de uma classe base.

#include using namespace std class Train {int Numberofwheels int Numberofcoaches public: void Traininfo (int n, int m) {Numberofwheels = n Numberofcoaches = m} void showinfo () {cout<Este caso de herança é chamado de herança multinível. A classe entre a primeira e a última classe também é conhecida como classe base intermediária.O que você acha, a última classe pode herdar membros da primeira classe? Sim pode

#include using namespace std class First {protected: int a public: void getinfofirst (int x) {a = x} void showinfofirst () {std :: cout<< 'Value of a = ' < 

Resultado:

Valor de a = 10

Valor de b = 20

Valor de c = 30

Valor de d = 50

Herança Hierárquica

Certos problemas não podem ser resolvidos com a ajuda de herança simples ou multinível. Na herança hierárquica, mais de 1 classe herda de uma única classe base.

#include using namespace std class College {public: College () {cout<< 'We are in class College' << endl } } class Student: public College { } class Faculty: public College { } int main() { Student student Faculty faculty return 0 }

Resultado:

Estamos em aula faculdade

Estamos em aula faculdade

Herança múltipla em C ++

Vimos na herança hierárquica que uma classe base tinha mais de uma classe derivada. Na herança múltipla, uma classe derivada tem mais de uma classe base.

#include using namespace std class One {protected: int a public: void getinfoOne (int x) {a = x}} class Two {protected: int b public: void getinfoTwo (int y) {b = y}} class Main: public One, public Two {public: void Display () {std :: cout<< 'Value of a = ' < Neste ponto, temos um bom entendimento de todos os tipos de herança usados ​​em C ++. Mas, espere e se quisermos usar 2 tipos diferentes de herança? É possível? Sim, é possível com a ajuda da Herança híbrida. Na herança híbrida, combinamos 2 tipos diferentes de herança. Por exemplo: herança múltipla e multinível, herança hierárquica e múltipla, etc.

#include using namespace std class World {protected: int a public: void getinfoWorld (int x) {a = x}} class Continent: public World {protected: int b public: void getinfoContinent (int y) {b = y}} class Country {protected: int d public: void getinfoCountry (int m) {d = m}} class Australia: public Continent, public Country {public: void Display () {std :: cout<< 'Value of a = ' < 

Vamos entender o diagrama acima, que nos ajudará a entender o problema do diamante. a classe B e a classe C herdam da classe A, portanto, ambas as classes A e B têm atributos e métodos da classe A. se a classe D herda da classe B, assim como a classe C., a classe D terá todos os atributos da classe B e da classe C . Ele também tem todos os atributos da classe A herdados da classe B, bem como da classe C., portanto, se fizermos um objeto da classe D e chamarmos um método da classe A. uma situação ambígua será criada e o compilador será confundido de onde deve classificar o método de A, da classe B ou classe D.

Para resolver essa ambigüidade, usamos um conceito chamado classe base virtual. Quando transformamos uma classe base em uma classe base virtual, apenas uma cópia dessa classe é herdada, independentemente do número de caminhos existentes entre a classe base virtual e uma classe derivada.

classe A {} classe B: público virtual A {} classe C: público virtual A {} classe D: público C, público D {}

Com isso, chegamos ao fim deste artigo sobre Herança em C ++. Se você deseja saber mais, confira o pela Edureka, uma empresa de aprendizagem online confiável. O curso de certificação e treinamento Java J2EE e SOA da Edureka foi projetado para treiná-lo tanto para os conceitos básicos e avançados do Java, juntamente com várias estruturas Java como Hibernate e Spring.

Tem alguma questão para nós? Mencione isso na seção de comentários deste blog e entraremos em contato com você o mais breve possível.