English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C++ Herança

Neste artigo, você aprenderá sobre C ++toda a informação sobre herança. Mais especificamente, o que é herança e diferentes métodos de implementação de herança por exemplo.

herança em C ++um dos principais recursos da programação orientada a objetos. Ele permite que o usuário crie um novoClasse(Classe derivada).

As classes derivadas herdaram todas as funcionalidades da classe base e podem ter suas próprias outras funcionalidades.

Por que usar herança?

Suponha que você precise de três papéis no jogo-umprofessor de matemática(Professor de matemática),umjogador de futebol (Footballer)e umComerciante(Businessman).

Como todos os papéis são humanos, eles podem andar e falar. Mas, eles também têm habilidades especiais. O professor de matemática podeensinar matemática, os jogadores de futebol podemjogar futebol, os comerciantes podemGerenciar empresas.

Você pode criar três classes separadas que podem andar, falar e executar suas habilidades especiais, conforme mostrado na figura a seguir.

Em cada classe, você replicará o mesmo código de andar (Walk) e falar (Talk) para cada papel.

Se quiser adicionar novas funcionalidades-comer (comer), precisaremos implementar o mesmo código para cada personagem. Isso pode facilmente levar a erros (ao copiar) e código repetido.

Se tivermos umPersonClasse, que possui funcionalidades básicas, como falar, andar, comer, dormir e adicionar habilidades especiais para cada papel, isso torna mais fácilMuito. Isso é feito através da herança.

Ao usar herança, você não precisa implementar o mesmo código para cada classe. BastaHerançaElas são suficientes.

Portanto, para os professores de matemática (classe derivada), você pode herdar todas as funcionalidades da classe base Person e adicionar novas funcionalidades.TeachMaths(ensinar matemática). Da mesma forma, para o futebolista, você herda todas as funções da classe Person e adiciona novas funçõesPlayFootball(jogar futebol)etc.

Isso torna seu código mais conciso, fácil de entender e expandível.

É importante lembrar que:ao usar herança, cada classe derivada deve atender aos requisitos, independentemente de ser uma classe base. No exemplo acima, o professor de matemática éuma pessoa, o futebolista éuma pessoa. Você não pode ter:O comerciante é a empresa.

C ++Implementação da herança em programação

class Person 
{
  ... .. ...
};
class MathsTeacher : public Person 
{
  ... .. ...
};
class Footballer : public Person
{
  .... .. ...
};

No exemplo acima, a classe Person é a classe base, enquanto as classes MathsTeacher e Footballer são derivadas de Person.

As classes derivadas são apresentadas juntamente com a declaração da classe, seguidas de dois pontos, a palavra-chave public e o nome da classe base que herda.

Como MathsTeacher e Footballer são derivadas de Person, podem acessar todos os dados e funções de membro da classe Person.

Exemplo: C ++Herança em programação

Criando personagens de jogo usando o conceito de herança.

#include <iostream>
using namespace std;
class Person
{
     public:
        string profession;
        int age;
        Person(): profession("desempregado"), age(16) { }
        void display()
        {
             cout << "Minha profissão é: " << profession << endl;
             cout << "Minha idade é: " << age << endl;
             walk();
             talk();
        }
        void walk() { cout << "Eu vou andar." << endl; }
        void talk() { cout << "Eu vou falar." << endl; }
};
// A classe MathsTeacher herdada da classe base Person.
class MathsTeacher : public Person
{
    public:
       void teachMaths() { cout << "Eu vou ensinar matemática." << endl; }
};
// A classe Footballer herdada da classe base Person.
class Footballer : public Person
{
    public:
       void playFootball() { cout << "Eu vou jogar futebol." << endl; }
};
int main()
{
     MathsTeacher teacher;
     teacher.profession = "professor";
     teacher.age = 23;
     teacher.display();
     teacher.teachMaths();
     Footballer footballer;
     footballer.profession = "atleta";
     footballer.age = 19;
     footballer.display();
     footballer.playFootball();
     return 0;
}

Resultados de saída

Minha profissão é: professor
Minha idade é: 23
Eu vou andar.
Eu vou falar
Eu vou ensinar matemática.
Minha profissão é: atleta
Minha idade é: 19
Eu vou andar.
Eu vou falar
Eu vou jogar futebol.

Neste programa, Person é a classe base, enquanto MathsTeacher e Footballer são derivadas da classe base Person.

A classe Person tem dois membros de dados- profession e age. Ele também tem dois membros funções- walk() e talk().

Tanto MathsTeacher quanto Footballer podem acessar todos os membros de dados e funções da classe Person.

No entanto, MathsTeacher e Footballer também têm seus próprios membros funções: teachMaths() e playFootball(). Essas funções podem ser acessadas apenas pelas próprias classes.

No função main(), foi criado um novo objeto MathsTeacher teacher.

Isso pode acessar os membros de dados Person, portanto, pode configurar a profissão (profissão) e a idade (idade) de teacher. Usar a função display() definida na classe Person para exibir esses dados. Da mesma forma, a classe MathsTeacher define a função teachMaths().

Da mesma forma, também será criado um novo objeto Footballer footballer. Ele também pode acessar os membros de dados Person e pode chamar a função display() para exibir. Em seguida, apenas o jogador de futebol (footballer) pode acessar a função playFootball().

Especificadores de acesso na herança

Ao criar classes derivadas a partir da classe base, pode-se usar diferentes especificadores de acesso para herdar os membros de dados da classe base.

Estes podem ser public, protected ou private.

No exemplo acima, a classe base Person foi herdada publicamente por MathsTeacher e football.

Saiba Mais SobreC ++de Herança Pública, Protegida e PrivadaMais Informações.

Sobrescrita de Membro da Função na Herança

Supondo que os membros das funções da classe base e derivada tenham o mesmo nome e parâmetros.

Se criar um objeto da classe derivada e tentar acessar o membro da função, só pode chamar a função do membro da classe derivada.

Os membros da classe derivada sobrescrevem os membros da classe base.

Saiba Mais SobreC ++de Sobrescrita de FunçãoMais Informações.