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 Única
- Herança multinível
- Herança Hierárquica
- Herança múltipla em C ++
- Herança híbrida em C ++
- O problema do diamante
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.
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 ++
- Público
- Privado
- 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 herdado | Não herdado | Nã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.