Maison >développement back-end >C++ >Explication détaillée des fonctions amies C++ : Comment les fonctions amies sont-elles utilisées dans différentes unités de compilation ?
Les fonctions Ami permettent aux fonctions d'accéder aux membres privés d'autres classes. Lorsque la fonction ami et la classe à laquelle elle accède ne sont pas dans la même unité de compilation, il existe deux cas de figure : la fonction ami est déclarée dans le fichier d'en-tête : la déclaration de la fonction ami se trouve dans le fichier d'en-tête de la classe, et le la définition de la classe se trouve dans un fichier source différent, les fonctions amies peuvent accéder aux membres privés. Les fonctions ami sont déclarées dans les fichiers source : La déclaration et la définition des fonctions ami se trouvent dans des fichiers source séparés. La fonction ami doit être déclarée dans le fichier d'en-tête avant de pouvoir être utilisée dans d'autres unités de compilation.
C++ Explication détaillée des fonctions ami : L'utilisation de fonctions ami dans différentes unités de compilation
Une fonction ami est un type spécial de fonction en C++ qui peut accéder aux membres privés d'autres classes. Cela permet aux fonctions amies d'effectuer des opérations que d'autres classes ne peuvent pas, comme modifier des données privées ou appeler des méthodes privées.
Fonctions ami dans différentes unités de compilation
L'utilisation des fonctions ami devient plus compliquée lorsque vous organisez votre code en différentes unités de compilation (telles que des fichiers source ou des fichiers d'en-tête). Pour qu'une fonction ami puisse accéder aux membres privés d'une autre classe, la classe doit être déclarée avant la fonction ami.
Si la fonction ami et la classe à laquelle elle accède ne sont pas dans la même unité de compilation, il existe deux scénarios différents :
Scénario 1 : La fonction ami est déclarée dans le fichier d'en-tête
Dans ce cas, l'ami Le La déclaration de la fonction se trouve dans le fichier d'en-tête de la classe, tandis que la définition de la classe se trouve dans un fichier source différent. C'est le cas le plus courant :
// header.h class MyClass { // ... friend void myFriendFunction(); }; // source.cpp #include "header.h" void myFriendFunction() { MyClass obj; // 可以访问 MyClass 的 private 成员 obj.privateMember = 10; }
Scénario 2 : Fonction Friend déclarée dans le fichier source
Dans ce cas moins courant, la déclaration et la définition de la fonction ami sont dans des fichiers sources séparés :
// class.cpp class MyClass { // ... friend void myFriendFunction(); }; // friend.cpp #include "class.h" void myFriendFunction() { MyClass obj; // 可以访问 MyClass 的 private 成员 obj.privateMember = 10; }
Pour le scénario 2 , vous devez également déclarer la fonction ami dans le fichier d'en-tête pour l'utiliser dans d'autres unités de compilation :
// header.h class MyClass; // 前向声明 extern void myFriendFunction();
Cas pratique
Considérez l'exemple suivant d'utilisation d'une fonction ami pour faire fonctionner un membre privé :
#include <iostream> class MyClass { int privateMember; public: MyClass(int val) : privateMember(val) {} friend void printPrivate(MyClass& obj); }; void printPrivate(MyClass& obj) { std::cout << "Private member: " << obj.privateMember << std::endl; } int main() { MyClass obj(10); printPrivate(obj); // 可以访问 privateMember return 0; }
Dans cet exemple , printPrivate()
友元函数可以访问 MyClass
的私有成员 privateMember
, et l'imprime sur la console.
Notes
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!