Spécificateurs d' accès C++


Spécificateurs d'accès

À présent, vous êtes assez familier avec le publicmot-clé qui apparaît dans tous nos exemples de classe :

Exemple

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

Le publicmot clé est un spécificateur d'accès. Les spécificateurs d'accès définissent comment les membres (attributs et méthodes) d'une classe peuvent être accédés. Dans l'exemple ci-dessus, les membres sont public- ce qui signifie qu'ils peuvent être consultés et modifiés depuis l'extérieur du code.

Cependant, que se passe-t-il si nous voulons que les membres soient privés et cachés du monde extérieur ?

En C++, il existe trois spécificateurs d'accès :

  • public - les membres sont accessibles depuis l'extérieur de la classe
  • private - les membres ne sont pas accessibles (ou visualisés) depuis l'extérieur de la classe
  • protected- Les membres ne sont pas accessibles depuis l'extérieur de la classe, mais ils sont accessibles dans les classes héritées. Vous en apprendrez plus sur l' héritage plus tard.

Dans l'exemple suivant, nous démontrons les différences entre les membres publicetprivate :

Exemple

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;
}

Si vous tentez d'accéder à un membre privé, une erreur se produit :

error: y is private

Remarque : Il est possible d'accéder aux membres privés d'une classe à l'aide d'une méthode publique à l'intérieur de la même classe. Voir le chapitre suivant ( Encapsulation ) pour savoir comment procéder.

Conseil : il est recommandé de déclarer vos attributs de classe comme privés (aussi souvent que vous le pouvez). Cela réduira la possibilité que vous-même (ou d'autres personnes) gâchiez le code. C'est également l'ingrédient principal du concept d' encapsulation , que vous découvrirez plus en détail dans le chapitre suivant.

Remarque : Par défaut, tous les membres d'une classe sont privatesi vous ne spécifiez pas de spécificateur d'accès :

Exemple

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