Maison > Article > développement back-end > Comment le mécanisme ami des fonctions C++ brise-t-il l’encapsulation ?
En C++, le mécanisme ami rompt l'encapsulation et permet aux fonctions ou classes d'accéder aux membres privés d'autres classes. En utilisant le mot-clé ami, vous pouvez déclarer une fonction comme amie d'une classe, vous permettant d'accéder à ses données et méthodes privées. Le mécanisme ami est souvent utilisé pour résoudre les dépendances cycliques entre les classes, par exemple en permettant aux constructeurs de devenir amis les uns des autres et d'accéder aux objets d'initialisation des membres privés des uns et des autres. Il convient de noter que le mécanisme ami réduira l'encapsulation, il doit donc être utilisé avec prudence et seules les fonctions ou classes réellement nécessaires sont désignées comme amis.
Mécanisme ami de la fonction C++ : un outil puissant pour rompre l'encapsulation
Introduction
Le mécanisme ami est un mécanisme en C++ qui rompt l'encapsulation. Il permet à une fonction ou à une classe d'accéder à d'autres classes ou membres privés. de la fonction. Ceci est utile dans certaines situations, par exemple lorsqu'il s'agit de dépendances circulaires entre classes ou lorsque vous devez accéder à des membres spécifiques d'autres classes.
Usage
Pour déclarer une fonction comme ami d'une classe, vous pouvez utiliser le mot-clé friend
. Par exemple :
class MyClass { private: int private_member; public: friend void myFriendFunction(MyClass& obj); }; void myFriendFunction(MyClass& obj) { // 可以访问 MyClass 类的私有成员 private_member std::cout << obj.private_member << std::endl; }
Cas pratique : Dépendances circulaires
Considérons l'exemple suivant, où deux classes dépendent l'une de l'autre :
class A { private: std::vector<B*> b_objects; }; class B { private: A* a_object; };
Si les dépendances circulaires ne sont pas autorisées, les deux classes ne peuvent pas être initialisées car les membres privés du les classes se réfèrent les unes aux autres. Le mécanisme ami peut résoudre ce problème en faisant du constructeur de la classe un ami de l'autre partie, permettant ainsi l'accès aux membres privés de l'autre partie.
class A { private: std::vector<B*> b_objects; friend class B; // 允许 B 类访问 A 的私有成员 }; class B { private: A* a_object; friend class A; // 允许 A 类访问 B 的私有成员 };
Remarque :
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!