Especificadores de acesso C++


Especificadores de acesso

Até agora, você está bastante familiarizado com a palavra- publicchave que aparece em todos os nossos exemplos de classe:

Exemplo

class MyClass {  // The class
  public:        // Access specifier
    // class members goes here
};

A publicpalavra-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 classe
  • private - os membros não podem ser acessados ​​(ou visualizados) de fora da classe
  • protected- 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 publice privatemembros:

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 privatese você não especificar um especificador de acesso:

Exemplo

class MyClass {
  int x;   // Private attribute
  int y;   // Private attribute
};