Pourquoi des objets de la même classe peuvent-ils accéder aux données privées des autres ?
Considérez l'extrait de code suivant :
class TrivialClass { public: TrivialClass(const std::string& data) : mData(data) {}; const std::string& getData(const TrivialClass& rhs) const { return rhs.mData; }; private: std::string mData; };
Étrangement, getData() peut accéder au membre privé mData d'un autre objet TrivialClass. Pourquoi est-ce autorisé ?
Contrôle d'accès par classe
En C , le contrôle d'accès est implémenté classe par classe, et non par objet. Cela signifie que tous les objets de la même classe ont le même accès aux membres privés de la classe, quel que soit leur état ou tout autre objet avec lequel ils peuvent interagir.
Implémentation au moment de la compilation
Le contrôle d'accès C est appliqué au moment de la compilation, ce qui rend peu pratique la mise en œuvre d'un contrôle par objet. Cependant, le contrôle par classe peut être mis en œuvre de manière efficace et fiable lors de la compilation.
Accès protégé
Bien que le contrôle d'accès soit généralement par classe, le spécificateur d'accès protégé fournit une forme rudimentaire de contrôle par objet. Cependant, ce contrôle est limité par rapport à ce qui serait possible avec un véritable contrôle d'accès par objet.
En conclusion, les objets d'une même classe peuvent accéder aux données privées des autres car le mécanisme de contrôle d'accès de C fonctionne sur un base par classe. Cette décision de conception permet une application efficace et fiable du contrôle d'accès lors de la compilation.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!