Especificadores de acesso C++
Especificadores de acesso
Até agora, você está bastante familiarizado com a palavra- public
chave que aparece em todos os nossos exemplos de classe:
Exemplo
class MyClass { // The class
public: // Access specifier
// class members goes here
};
A public
palavra-chave é um especificador de acesso.
Os especificadores de acesso definem como os membros (atributos e métodos) de uma classe podem ser acessados. No exemplo acima, os membros são public
- o que significa que podem ser acessados e modificados de fora do código.
No entanto, e se quisermos que os membros sejam privados e escondidos do mundo exterior?
Em C++, existem três especificadores de acesso:
public
- os membros são acessíveis de fora da classeprivate
- os membros não podem ser acessados (ou visualizados) de fora da classeprotected
- membros não podem ser acessados de fora da classe, no entanto, eles podem ser acessados em classes herdadas. Você aprenderá mais sobre Herança mais tarde.
No exemplo a seguir, demonstramos as diferenças entre public
e private
membros:
Exemplo
class
MyClass {
public: // Public access
specifier
int x; // Public attribute
private: // Private access specifier
int y; // Private attribute
};
int main() {
MyClass
myObj;
myObj.x = 25; // Allowed (public)
myObj.y = 50; //
Not allowed (private)
return 0;
}
Se você tentar acessar um membro privado, ocorrerá um erro:
error: y is private
Nota: É possível acessar membros privados de uma classe usando um método público dentro da mesma classe. Veja o próximo capítulo ( Encapsulamento ) sobre como fazer isso.
Dica: É considerado uma boa prática declarar seus atributos de classe como privados (com a maior frequência possível). Isso reduzirá a possibilidade de você (ou outros) confundir o código. Esse também é o principal ingrediente do conceito de encapsulamento , sobre o qual você aprenderá mais no próximo capítulo.
Nota: Por padrão, todos os membros de uma classe são private
se você não especificar um especificador de acesso:
Exemplo
class
MyClass {
int x; // Private attribute
int y; // Private attribute
};