O significado literal do termo “herança” significa derivar características dos ancestrais. Da mesma forma, em programação , o conceito de herança gira em torno da ideia de herdar as propriedades de uma classe por suas subclasses. A classe pai cujas propriedades estão sendo herdadas é conhecida como a classe base e todas as classes que herdam da classe base são as classes derivadas. Este é um dos recursos mais importantes da programação orientada a objetos . A herança aumenta a eficiência de um programa, fornecendo vantagens como capacidade de reutilização de código e ocultação de dados.

Compreenda o conceito de herança com a ajuda de um exemplo da vida real. Considere que existem 3 classes: Inglês, Física e Matemática. Todos os três têm funções-marcas (), total_students () e faculdade (). Em vez de criar três classes separadas com as mesmas funções, você pode criar uma única classe Assunto com essas funções comuns, que podem ser herdadas por essas 3 classes. A seguinte ilustração esquemática explica isso:

Single_Inheritance_In_C_P_P_1

Sem usar o conceito de herança, classes separadas com funções comuns causariam redundância no programa.

Single_Inheritance_In_C_P_P_2

Depois de usar o conceito de herança, você pode usar a capacidade de reutilização do código para aumentar a eficiência do programa e também tornar o código mais limpo. A ilustração esquemática acima mostra como você pode combinar três classes redundantes com recursos comuns em uma classe cujos membros podem ser herdados por outras classes derivadas.

Destaque-se de seus colegas esta avaliação Temporada

Comece a aprender com nossos cursos GRATUITOS Inscreva-se agora

Destaque-se de seus pares nesta temporada de avaliação

Herança única em C ++

A herança na qual uma única classe derivada é herdada de uma única classe base é conhecida como Herança Única. É o mais simples entre todos os tipos de herança, pois não inclui nenhum tipo de combinação de herança ou diferentes níveis de herança. A classe filha pode herdar todos os membros da classe base de acordo com o modo de visibilidade (ou seja, privado, protegido e público) que é especificado durante a herança. No entanto, é opcional definir o modo de visibilidade durante a herança. Se você não definir, ele define o modo de visibilidade como privado por padrão.

Single_Inheritance_In_C_P_P_3

Sintaxe para implementar herança única em C ++

A seguinte sintaxe pode ser usada para obter herança única em C ++:

classe base_class_1

{

//definição de classe

};

classe associated_class: visibility_mode base_class_1

{

//definição de classe

};

Descrição da sintaxe:

  • visibility_mode: fornece o modo de visibilidade na declaração da classe, pois especifica como os membros da classe base serão herdados pela classe derivada.
  • base_class: este é o nome da classe da qual a classe derivada herda suas propriedades e características.
  • classe derivada: este é o nome da classe derivada que pode herdar as propriedades da classe base usando o modo de visibilidade.

Ambiguidade na herança única em C ++

Ambigüidades podem surgir durante a implementação da Herança única em C ++. As ambigüidades acontecem quando existem funções com o mesmo nome e tipo de retorno na classe base e na classe derivada. Por padrão, se um objeto da classe derivada acessa tal função, a função da classe derivada é chamada (que também é chamada de substituição de função). No entanto, se quiser evitar essa situação ambígua, você pode usar um operador de resolução de escopo para definir essas funções separadamente.

O exemplo a seguir ilustra a ambigüidade e sua solução em Herança única em C ++.

#include

usando namespace std;

//classe base

organização de classe

{

privado:

nome da string;

setor de cordas;

público:

organização ()

{

nome=”ABC”;

setor=”TI”;

}

//função showName () da classe base

void showName ()

{

cout <<"O nome é:"<

cout <<"O setor é:"<

}

};

//classe derivada

funcionário da classe: organização pública

{

privado:

nome da string;

ID int;

público:

funcionário ()

{

nome=”Funcionário_A”;

ID=1001;

}

//função showName () da classe derivada

void showName ()

{

cout <<"O nome é:"<

cout <<"O ID é:"<

}

};

int main ()

{

//cria um objeto da classe derivada

obj do funcionário;

//chame a função showName () da classe base

obj.organization:: showName ();

cout <<"\ n";

//chame a função showName () da classe base

obj.employee:: showName ();

}

Single_Inheritance_In_C_P_P_4

No programa acima, o operador de resolução de escopo é usado para chamar a função showName () da classe base e a classe derivada com o mesmo nome e tipo de retorno. Sem o operador de resolução de escopo, a declaração de chamada de função será:

obj.showName ();//showName () da classe derivada será chamado

Quando o objeto da classe derivada chama a função showName (), a função showName () da classe derivada será chamada, substituindo o showName () da classe base. Então, depois de modificar a declaração acima para a declaração abaixo:

obj.organization:: showName ();//showName () da classe base

//será chamado

Agora, é explicitamente especificado que o objeto faz uma chamada para a função showName () da classe base. Portanto, o showName () da classe base é chamado sem ser sobrescrito.

Modos de visibilidade em herança única

O modo de visibilidade especifica o controle sobre os membros herdados nas classes derivadas. Uma classe pode herdar uma classe base em três modos de visibilidade em Herança Única:

  • Modo de visibilidade pública

No modo de visibilidade pública, você pode acessar todos os membros da classe base apenas de acordo com seus especificadores de acesso. Os membros especificados como public, protected e private na classe base permanecem public, protected e private respectivamente na classe derivada. Isso significa que os membros públicos podem ser acessados ​​pela classe derivada e também por todas as outras classes. Apenas a classe derivada e seus membros acessarão os membros protegidos, enquanto os membros privados permanecerão inacessíveis pela classe derivada.

O fragmento de código a seguir ilustra como aplicar o modo de visibilidade pública em uma classe derivada em Herança única:

classe base_class_1

{

//membros de dados

//funções de membro

};

classe associated_class: public base_class_1

{

//membros de dados

//funções de membro

};

O código a seguir exibe o funcionamento do modo de visibilidade pública com todos os três especificadores de acesso da classe base:

#include

usando namespace std;

classe base_class

{

público:

int var1;

protegido:

int var2;

privado:

int var3;

};

//o modo de visibilidade de classe derivada é público

//portanto, os especificadores de acesso permanecerão os mesmos

classe associated_class: public base_class

{

};

//função principal

int main ()

{

obj de classe derivada;

//Acessível

cout <<"O valor de var1 é"<

//Não acessível

cout <<"O valor de var2 é"<

//Não acessível

cout <<"O valor de var3 é"<

};

Single_Inheritance_In_C_P_P_5

No exemplo acima, a visibilidade da classe derivada derivada_class é definida como pública, de forma que todos os especificadores de acesso permanecerão os mesmos. var1 é um membro público, portanto, pode ser acessado fora da classe derivada. var2 é um membro protegido, portanto, é acessível dentro da classe derivada, mas não fora dela, portanto, não é acessível no código fornecido. Considerando que var3 é um membro privado, portanto, não é acessível fora da classe base base_class.

  • Modo de visibilidade privada

No modo de visibilidade privada, todos os especificadores de acesso, ou seja, privado, protegido e público tornam-se privados. Isso significa que você não pode acessá-los fora da classe em que estão definidos. Eles só podem ser acessados ​​por meio das funções de membro da mesma classe. E uma vez que não pode herdar os membros privados, esses membros também não podem ser herdados posteriormente.

O fragmento de código a seguir ilustra como aplicar o modo de visibilidade privada em uma classe derivada em Herança única:

classe base_class_1

{

//membros de dados

//funções de membro

};

classe associated_class: private base_class_1

{

//membros de dados

//funções de membro

};

O código a seguir exibe o funcionamento do modo de visibilidade privada com todos os três especificadores de acesso da classe base:

#include

usando namespace std;

classe base_class

{

público:

int var1;

protegido:

int var2;

privado:

int var3;

};

//o modo de visibilidade de classe derivada é privado

//então todos os especificadores de acesso se tornarão privados

classe associated_class: private base_class

{

};

//função principal

int main ()

{

obj de classe derivada;

//Não acessível

cout <<"O valor de var1 é"<

//Não acessível

cout <<"O valor de var2 é"<

//Não acessível

cout <<"O valor de var3 é"<

};

Single_Inheritance_In_C_P_P_6

No exemplo acima, o modo de visibilidade da classe derivada derivada_class é privado. Portanto, todos os membros da classe base tornam-se privados na classe derivada. O erro é gerado quando o objeto da classe derivada tenta acessar esses membros fora da classe.

  • Modo de visibilidade protegida

No modo de visibilidade protegido, os membros públicos e privados da classe base ficam protegidos enquanto os membros privados permanecem privados. Portanto, como resultado, os membros públicos e protegidos da classe base são acessados ​​apenas dentro da classe derivada. Eles irão gerar um erro se você tentar acessá-los fora da classe derivada. Enquanto isso, o membro privado permanecerá inacessível fora da classe base.

O fragmento de código a seguir ilustra como aplicar o modo de visibilidade protegido em uma classe derivada em Herança Única:

classe base_class_1

{

//membros de dados

//funções de membro

};

classe derivada_classe: protegida base_class_1

{

//membros de dados

//funções de membro

};

O código a seguir exibe o funcionamento do modo de visibilidade pública com todos os três especificadores de acesso da classe base:

#include

usando namespace std;

classe base_class

{

público:

int var1;

protegido:

int var2;

privado:

int var3;

};

//o modo de visibilidade de classe derivada é protegido

//então o público se torna protegido

classe derivada_classe: base_classe protegida

{

};

//função principal

int main ()

{

obj de classe derivada;

//Não acessível

cout <<"O valor de var1 é"<

//Não acessível

cout <<"O valor de var2 é"<

//Não acessível

cout <<"O valor de var3 é"<

};

Single_Inheritance_In_C_P_P_7

Neste exemplo, ele protege o modo de visibilidade da classe derivada derivada_class. Portanto, var1 se torna um membro protegido, enquanto var2 permanece o mesmo, ou seja, um membro protegido e, portanto, ambos não são acessíveis fora da classe derivada. No entanto, var3 permanece como um membro privado, portanto, não é acessível fora da classe base base_class.

A tabela a seguir ilustra o controle das classes derivadas sobre os membros da classe base em diferentes modos de visibilidade em herança única:

CLASSE BASE

CLASSE DERIVADA

CLASSE DERIVADA

CLASSE DERIVADA

Público

Protegido

Privado

PÚBLICO

Público

Protegido

Privado

PROTEGIDO

Protegido

Protegido

Privado

PRIVADO

Não herdado/permanece privado

Não herdado/permanece privado

Não herdado/permanece privado

Curso Full Stack Web Developer

Para se tornar um especialista em MEAN Stack Ver Curso

Full Stack Web Developer Course

Exemplos de herança única em C ++

Os exemplos a seguir ilustram a herança única em C ++.

Exemplo 1

O exemplo a seguir ilustra o funcionamento do construtor padrão em Herança única.

#include

usando namespace std;

//classe base

organização de classe

{

público:

//construtor da classe base

organização ()

{

cout <<"Eu sou o construtor da classe base \ n \ n";

}

};

//classe derivada

funcionário da classe: organização pública

{

público:

//construtor da classe derivada

funcionário ()

{

cout <<"Eu sou o construtor da classe derivada \ n \ n";

}

};

int main ()

{

//cria um objeto da classe derivada

obj do funcionário;//construtor da classe base

//e a classe derivada serão chamadas.

return 0;

}

Single_Inheritance_In_C_P_P_8

No exemplo acima, a organização da classe base é herdada por um único funcionário da classe derivada. Como uma classe está herdando uma única classe base, essa é a estrutura da herança de nível único. Assim que ele cria um objeto da classe derivada, os construtores padrão da classe base e da classe derivada são chamados na mesma ordem.

Exemplo 2

O exemplo a seguir ilustra o funcionamento de funções de membro e membros de dados em Herança única em C ++.

#include

usando namespace std;

//classe base

Área de aula

{

público:

comprimento interno=10;

amplitude interna=20;

//função findArea () da classe base

//para calcular a área

int findArea ()

{

retornar comprimento * largura;

}

//função para imprimir a área

void printArea ()

{

cout <<"A área calculada é:"<

}

};

//classe derivada

Volume da classe: área pública

{

público:

altura interna=3;

//função findVolume () da classe derivada

//para calcular o volume

void printVolume ()

{

//calculando o volume usando

//resultado calculado na classe base.

cout <<"O volume calculado é:"<<(findArea () * altura) <

}

};

int main ()

{

//cria um objeto da classe derivada

Volume obj;

//chamar função de classe base

obj. printArea ();

//chamar função de classe derivada

obj.printVolume ();

return 0;

}

Single_Inheritance_In_C_P_P_9.

No exemplo acima, a classe base Area contém uma função membro findArea () que retorna e imprime a área. A classe derivada Volume acessa a função findArea () dentro de sua função printVolume () e calcula o volume usando a área retornada por findArea (). O objeto da classe derivada acessa essas funções da classe base e da classe derivada para imprimir os resultados.

Avance sua carreira como desenvolvedor MEAN stack com o Desenvolvedor Web Full Stack-Programa MEAN Stack Master . Inscreva-se agora!

Considerações finais!

Para resumir rapidamente o tutorial, você aprendeu um tipo importante de herança chamada herança única em C ++. Você começou com uma introdução simples à herança e gradualmente avançou com uma explicação básica de herança única em C ++. Seguindo em frente, você aprendeu a sintaxe para implementar herança única usando o conceito de classes pai e filho.

Além disso, você viu uma ambigüidade na herança única chamada substituição de função, que ocorre devido à mesma assinatura de função nas classes base e também nas classes filhas. Você viu como usar modos de visibilidade em herança única para atingir o nível desejado de segurança e desempenho. Finalmente, você examinou alguns exemplos práticos de herança única em C ++.

Se quiser aprender o básico de C ++, você pode verificar o guia/tutorial completo do Simplilearn em C ++ para iniciantes .

Se você está procurando uma carreira brilhante na área de Full Stack Web Development, pode conferir o treinamento abrangente da Simplilearn de Desenvolvimento Web Full Stack . É um programa individualizado de 9 meses liderado por especialistas do setor que estão prontos para guiá-lo durante toda a jornada. Você aprenderá algumas das tecnologias e habilidades mais importantes que o ajudarão a conseguir uma carreira em um gigante da tecnologia de ponta. Algumas habilidades importantes que você aprenderá neste curso incluem AWS, Java e suas bibliotecas, incluindo Hibernate, Spring, etc., DevOps , Agile , JS , HTML , CSS, Servlets e muitos mais.

Você também pode verificar nossa lista completa de Cursos online grátis para se aprimorar.

Se você tiver alguma dúvida neste artigo sobre “Herança única em C ++” ou qualquer outra sugestão, sinta-se à vontade para deixar um comentário abaixo e nossos especialistas entrarão em contato com você o mais rápido possível.

Boa aprendizagem!

Categories: Wordpress