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

Dominando Herança em C++: Public, Protected & Private Explicados

Herança Public, Protected e Private em C++

Neste tutorial, aprenderemos a usar herança public, protected e private em C++ com a ajuda de exemplos.

Na herança C++, podemos derivar uma classe filha da classe base em diferentes modos de acesso. Por exemplo,

 class Base { .... ... .... }; class Derived : public Base { .... ... .... };

Observe a palavra-chave public no código

 class Derived : public Base

Isso significa que criamos uma classe derivada da classe base no modo público. Alternativamente, também podemos derivar classes nos modos protected ou private.

Essas 3 palavras-chave (public, protected e private) são conhecidas como especificadores de acesso na herança C++.


Herança public, protected e private em C++

public, protected, e private herança têm as seguintes características:

Nota: Membros private da classe base são inacessíveis à classe derivada.

 class Base { public: int x; protected: int y; private: int z; }; class PublicDerived: public Base { // x é public // y é protected // z não é acessível de PublicDerived }; class ProtectedDerived: protected Base { // x é protected // y é protected // z não é acessível de ProtectedDerived }; class PrivateDerived: private Base { // x é private // y é private // z não é acessível de PrivateDerived }

Exemplo 1: Herança public em C++

 // Programa C++ para demonstrar o funcionamento da herança public #include <iostream> using namespace std; class Base { private: int pvt = 1; protected: int prot = 2; public: int pub = 3; // função para acessar membro private int getPVT() { return pvt; } }; class PublicDerived : public Base { public: // função para acessar membro protected da Base int getProt() { return prot; } }; int main() { PublicDerived object1; cout << "Private = " << object1.getPVT() << endl; cout << "Protected = " << object1.getProt() << endl; cout << "Public = " << object1.pub << endl; return 0; }

Saída

 Private = 1 Protected = 2 Public = 3

Aqui, derivamos PublicDerived de Base no modo público.

Como resultado, em PublicDerived:

Como membros private e protected não são acessíveis de main(), precisamos criar funções públicas getPVT() e getProt() para acessá-los:

 // Erro: membro "Base::pvt" é inacessível cout << "Private = " << object1.pvt; // Erro: membro "Base::prot" é inacessível cout << "Protected = " << object1.prot;

Observe que a função getPVT() foi definida dentro de Base. Mas a função getProt() foi definida dentro de PublicDerived.

Isso ocorre porque pvt, que é private em Base, é inacessível a PublicDerived.

No entanto, prot é acessível a PublicDerived devido à herança pública. Portanto, getProt() pode acessar a variável protected de dentro de PublicDerived.


Acessibilidade na Herança public

Acessibilidade membros private membros protected membros public
Classe Base Sim Sim Sim
Classe Derivada Não Sim Sim

Exemplo 2: Herança protected em C++

 // Programa C++ para demonstrar o funcionamento da herança protected #include <iostream> using namespace std; class Base { private: int pvt = 1; protected: int prot = 2; public: int pub = 3; // função para acessar membro private int getPVT() { return pvt; } }; class ProtectedDerived : protected Base { public: // função para acessar membro protected da Base int getProt() { return prot; } // função para acessar membro public da Base int getPub() { return pub; } }; int main() { ProtectedDerived object1; cout << "Private não pode ser acessado." << endl; cout << "Protected = " << object1.getProt() << endl; cout << "Public = " << object1.getPub() << endl; return 0; }

Saída

 Private não pode ser acessado. Protected = 2 Public = 3

Aqui, derivamos ProtectedDerived de Base no modo protected.

Como resultado, em ProtectedDerived:

Como sabemos, membros protected não podem ser acessados diretamente de fora da classe. Como resultado, não podemos usar getPVT() de ProtectedDerived.

É também por isso que precisamos criar a função getPub() em ProtectedDerived para acessar a variável pub.

 // Erro: membro "Base::getPVT()" é inacessível cout << "Private = " << object1.getPVT(); // Erro: membro "Base::pub" é inacessível cout << "Public = " << object1.pub;

Acessibilidade na Herança protected

Acessibilidade membros private membros protected membros public
Classe Base Sim Sim Sim
Classe Derivada Não Sim Sim (herdados como variáveis protected)

Exemplo 3: Herança private em C++

 // Programa C++ para demonstrar o funcionamento da herança private #include <iostream> using namespace std; class Base { private: int pvt = 1; protected: int prot = 2; public: int pub = 3; // função para acessar membro private int getPVT() { return pvt; } }; class PrivateDerived : private Base { public: // função para acessar membro protected da Base int getProt() { return prot; } // função para acessar membro private int getPub() { return pub; } }; int main() { PrivateDerived object1; cout << "Private não pode ser acessado." << endl; cout << "Protected = " << object1.getProt() << endl; cout << "Public = " << object1.getPub() << endl; return 0; }

Saída

 Private não pode ser acessado. Protected = 2 Public = 3

Aqui, derivamos PrivateDerived de Base no modo private.

Como resultado, em PrivateDerived:

Como sabemos, membros privados não podem ser acessados diretamente de fora da classe. Como resultado, não podemos usar getPVT() de PrivateDerived.

É também por isso que precisamos criar a função getPub() em PrivateDerived para acessar a variável pub.

 // Erro: membro "Base::getPVT()" é inacessível cout << "Private = " << object1.getPVT(); // Erro: membro "Base::pub" é inacessível cout << "Public = " << object1.pub;

Acessibilidade na Herança private

Acessibilidade membros private membros protected membros public
Classe Base Sim Sim Sim
Classe Derivada Não Sim (herdados como variáveis private) Sim (herdados como variáveis private)

Linguagem C

  1. Escolhendo a Estratégia de Nuvem Certa: Soluções Pública, Privada e Híbrida Explicadas
  2. Nuvem Pública: Benefícios, Riscos e Considerações Essenciais
  3. Nuvem Privada: Vantagens, Desvantagens e Como Protege Seus Dados Corporativos
  4. Dominando Variáveis, Literais e Constantes em C++: Guia Completo
  5. Classes e Objetos em C++: Guia Prático de Programação Orientada a Objetos
  6. Dominando Gerenciamento de Memória em C++: Uso Expert de new e delete
  7. Funções Amigas e Classes Amigas em C++: Dominando o Controle de Acesso
  8. Estruturas vs Classes em C++: Guia Prático para Desenvolvedores Embarcados
  9. Sigfox Lança Rede Privada, Aprimora Geolocalização e Expande Soluções IoT
  10. C++ Struct vs Class: Diferenças Principais, Sintaxe e Melhores Casos de Uso