Maison > développement back-end > C++ > le corps du texte

Comment le mécanisme ami des fonctions C++ brise-t-il l'encapsulation ?

WBOY
Libérer: 2024-04-11 15:51:01
original
885 Les gens l'ont consulté

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.

C++ 函数的友元机制如何打破封装性?

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;
}
Copier après la connexion

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;
};
Copier après la connexion

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 的私有成员
};
Copier après la connexion

Remarque :

  • Le mécanisme ami est un mécanisme qui brise l'encapsulation, il doit donc être utilisé avec prudence.
  • Les fonctions Friends peuvent accéder à tous les membres privés de la classe spécifiée, y compris les données et les méthodes.
  • Lors de la définition des amis, assurez-vous que seules les fonctions ou classes réellement nécessaires sont désignées comme amis.

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal