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

Herança pública, protegida e privada C++

Herança pública, protegida e privada de C++


Neste tutorial, aprenderemos a usar herança pública, protegida e privada 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 . Como alternativa, também podemos derivar classes em protegidos ou privado modos.

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

herança pública, protegida e privada em C++


público , protegido, e privado herança têm as seguintes características:

Observação: private membros 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 is public
    // y is protected
    // z is not accessible from PublicDerived
};

class ProtectedDerived: protected Base {
    // x is protected
    // y is protected
    // z is not accessible from ProtectedDerived
};

class PrivateDerived: private Base {
    // x is private
    // y is private
    // z is not accessible from PrivateDerived
}

Exemplo 1:herança pública C++

// C++ program to demonstrate the working of public inheritance

#include <iostream>
using namespace std;

class Base {
   private:
    int pvt = 1;

   protected:
    int prot = 2;

   public:
    int pub = 3;

    // function to access private member
    int getPVT() {
        return pvt;
    }
};

class PublicDerived : public Base {
   public:
    // function to access protected member from 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 privado e protegido os membros não podem ser acessados ​​a partir de main() , precisamos criar funções públicas getPVT() e getProt() para acessá-los:
// Error: member "Base::pvt" is inaccessible
cout << "Private = " << object1.pvt;

// Error: member "Base::prot" is inaccessible
cout << "Protected = " << object1.prot;

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

Isso ocorre porque pvt , que é privado em Base , está inacessível para PublicDerived .

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

Acessibilidade na herança pública

Acessibilidade membros privados membros protegidos membros públicos
Classe base Sim Sim Sim
Classe derivada Não Sim Sim

Exemplo 2:herança protegida por C++

// C++ program to demonstrate the working of protected inheritance

#include <iostream>
using namespace std;

class Base {
   private:
    int pvt = 1;

   protected:
    int prot = 2;

   public:
    int pub = 3;

    // function to access private member
    int getPVT() {
        return pvt;
    }
};

class ProtectedDerived : protected Base {
   public:
    // function to access protected member from Base
    int getProt() {
        return prot;
    }

    // function to access public member from Base
    int getPub() {
        return pub;
    }
};

int main() {
    ProtectedDerived object1;
    cout << "Private cannot be accessed." << endl;
    cout << "Protected = " << object1.getProt() << endl;
    cout << "Public = " << object1.getPub() << endl;
    return 0;
}



Resultado
Private cannot be accessed.
Protected = 2
Public = 3

Aqui, derivamos ProtectedDerived de Base em modo protegido .

Como resultado, em ProtectedDerived :

Como sabemos, protegido os membros não podem ser acessados ​​diretamente de fora da turma. Como resultado, não podemos usar getPVT() de ProtectedDerived .

É também por isso que precisamos criar o getPub() função em ProtectedDerived para acessar o pub variável.
// Error: member "Base::getPVT()" is inaccessible
cout << "Private = " << object1.getPVT();

// Error: member "Base::pub" is inaccessible
cout << "Public = " << object1.pub;

Acessibilidade na herança protegida

Acessibilidade membros privados membros protegidos membros públicos
Classe base Sim Sim Sim
Classe derivada Não Sim Sim (herdado como variáveis ​​protegidas)

Exemplo 3:herança privada C++

// C++ program to demonstrate the working of private inheritance

#include <iostream>
using namespace std;

class Base {
   private:
    int pvt = 1;

   protected:
    int prot = 2;

   public:
    int pub = 3;

    // function to access private member
    int getPVT() {
        return pvt;
    }
};

class PrivateDerived : private Base {
   public:
    // function to access protected member from Base
    int getProt() {
        return prot;
    }

    // function to access private member
    int getPub() {
        return pub;
    }
};

int main() {
    PrivateDerived object1;
    cout << "Private cannot be accessed." << endl;
    cout << "Protected = " << object1.getProt() << endl;
    cout << "Public = " << object1.getPub() << endl;
    return 0;
}

Saída
Private cannot be accessed.
Protected = 2
Public = 3

Aqui, derivamos PrivateDerived de Base no modo privado .

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 o getPub() função em PrivateDerived para acessar o pub variável.
// Error: member "Base::getPVT()" is inaccessible
cout << "Private = " << object1.getPVT();

// Error: member "Base::pub" is inaccessible
cout << "Public = " << object1.pub;

Acessibilidade na herança privada

Acessibilidade membros privados membros protegidos membros públicos
Classe base Sim Sim Sim
Classe derivada Não Sim (herdado como variáveis ​​privadas) Sim (herdado como variáveis ​​privadas)

Linguagem C

  1. Nuvem Pública Vs Nuvem Privada Vs Nuvem Híbrida
  2. Vantagens e desvantagens da nuvem pública
  3. Vantagens e desvantagens da nuvem privada
  4. Variáveis, literais e constantes de C++
  5. Classes e objetos C++
  6. Gerenciamento de memória C++:novo e excluir
  7. Função de amigo C++ e classes de amigo
  8. Estruturas e classes em C ++
  9. Rede de área privada construída na rede pública Sigfox
  10. Diferença entre estrutura e classe:explicada com exemplo de C++