Identificatori di accesso C++


Identificatori di accesso

Ormai hai abbastanza familiarità con la publicparola chiave che appare in tutti i nostri esempi di classe:

Esempio

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

La publicparola chiave è uno specificatore di accesso. Gli specificatori di accesso definiscono come è possibile accedere ai membri (attributi e metodi) di una classe. Nell'esempio sopra, i membri sono public- il che significa che è possibile accedervi e modificarli dall'esterno del codice.

Tuttavia, cosa succede se vogliamo che i membri siano privati ​​e nascosti dal mondo esterno?

In C++, ci sono tre identificatori di accesso:

  • public - i membri sono accessibili dall'esterno della classe
  • private - non è possibile accedere (o visualizzare) i membri dall'esterno della classe
  • protected- non è possibile accedere ai membri dall'esterno della classe, tuttavia è possibile accedervi nelle classi ereditate. Imparerai di più sull'ereditarietà più avanti.

Nell'esempio seguente, mostriamo le differenze tra membri publice private:

Esempio

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 provi ad accedere a un membro privato, si verifica un errore:

error: y is private

Nota: è possibile accedere ai membri privati ​​di una classe utilizzando un metodo pubblico all'interno della stessa classe. Vedere il prossimo capitolo ( Encapsulation ) su come farlo.

Suggerimento: è considerata una buona pratica dichiarare gli attributi della tua classe come privati ​​(il più spesso possibile). Ciò ridurrà la possibilità da parte tua (o di altri) di incasinare il codice. Questo è anche l'ingrediente principale del concetto di Encapsulation , di cui imparerai di più nel prossimo capitolo.

Nota: per impostazione predefinita, tutti i membri di una classe sono privatese non specifichi uno specificatore di accesso:

Esempio

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