Spécificateurs d' accès C++
Spécificateurs d'accès
À présent, vous êtes assez familier avec le public
mot-clé qui apparaît dans tous nos exemples de classe :
Exemple
class MyClass { // The class
public: // Access specifier
// class members goes here
};
Le public
mot 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 classeprivate
- les membres ne sont pas accessibles (ou visualisés) depuis l'extérieur de la classeprotected
- 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 public
etprivate
:
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 private
si vous ne spécifiez pas de spécificateur d'accès :
Exemple
class
MyClass {
int x; // Private attribute
int y; // Private attribute
};