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:
- herança pública faz
public
membros da classe basepublic
na classe derivada e oprotected
membros da classe base permanecemprotected
na classe derivada. - herança protegida torna o
public
eprotected
membros da classe baseprotected
na classe derivada. - herança privada torna o
public
eprotected
membros da classe baseprivate
na classe derivada.
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
:- prot é herdado como protegido .
- pub e
getPVT()
são herdados como públicos . - pvt está inacessível porque é privado em
Base
.
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
:- prot , pub e
getPVT()
são herdados como protegidos . pvt
está inacessível porque é privado emBase
.
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
:- prot ,
pub
egetPVT()
são herdados como privados . - pvt está inacessível porque é privado em
Base
.
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
- Nuvem Pública Vs Nuvem Privada Vs Nuvem Híbrida
- Vantagens e desvantagens da nuvem pública
- Vantagens e desvantagens da nuvem privada
- Variáveis, literais e constantes de C++
- Classes e objetos C++
- Gerenciamento de memória C++:novo e excluir
- Função de amigo C++ e classes de amigo
- Estruturas e classes em C ++
- Rede de área privada construída na rede pública Sigfox
- Diferença entre estrutura e classe:explicada com exemplo de C++