Maison > développement back-end > C++ > Explication détaillée des fonctions amies C++ : quelle est la différence entre les fonctions amies et les fonctions globales ?

Explication détaillée des fonctions amies C++ : quelle est la différence entre les fonctions amies et les fonctions globales ?

WBOY
Libérer: 2024-04-28 21:42:02
original
1201 Les gens l'ont consulté

Les fonctions Friend peuvent accéder aux données privées et protégées des membres de la classe, mais les fonctions globales ne le peuvent pas. Les fonctions Friend sont déclarées dans la déclaration de classe et les fonctions globales sont déclarées en dehors de la classe. Utilisez le mot-clé ami pour déclarer les fonctions ami et utilisez l'extern. mot-clé pour déclarer une fonction globale. Les fonctions amies obtiennent l'autorisation d'accéder aux variables membres de la classe via une déclaration. Par exemple, en déclarant une fonction amie getPrivateData, vous pouvez accéder à la variable privée x de la classe MyClass.

C++ 友元函数详解:友元函数和全局函数的区别?

C++ Explication détaillée des fonctions amies

La différence entre les fonctions amies et les fonctions globales

En C++, une fonction amie est une fonction spéciale qui peut accéder à des fonctions privées déclarées dans une fonction membre de classe et protégées membres de données. En revanche, les fonctions globales sont déclarées en dehors de la classe et n’ont pas accès aux données membres privées et protégées.

Syntaxe de la fonction ami

La syntaxe de la fonction ami est la suivante :

friend 返回类型 函数名(参数列表);
Copier après la connexion

Par exemple, déclarez une fonction ami qui peut accéder aux données privées des membres dans MaClasse : MyClass 中私有数据成员的友元函数:

friend int getPrivateData(MyClass& object);
Copier après la connexion

友元函数和全局函数的区别

友元函数和全局函数的主要区别如下:

  • 访问范围:友元函数可以访问类中的私有和受保护的数据成员,而全局函数不能。
  • 作用域:友元函数可以在类的声明中声明,而全局函数在类外声明。
  • 声明方式:友元函数使用 friend 关键字声明,而全局函数使用 extern 关键字声明。

实战案例

考虑一个包含私有成员变量 xMyClass 类:

class MyClass {
private:
    int x;
public:
    int getX();
    void setX(int value);
};
Copier après la connexion

要访问 MyClass 的私有数据成员 x,我们可以声明一个友元函数:

friend int getPrivateData(MyClass& object) {
    return object.x;
}
Copier après la connexion

使用友元函数

我们可以使用友元函数来访问 MyClass

int main() {
    MyClass object;
    object.setX(10);
    int privateData = getPrivateData(object);
    cout << "Private data: " << privateData << endl;
    return 0;
}
Copier après la connexion

Friend La différence entre les fonctions et les fonctions globales

🎜🎜Les principales différences entre les fonctions amies et les fonctions globales sont les suivantes : 🎜
  • 🎜Portée d'accès : 🎜Les fonctions amies peuvent accéder aux données privées et protégées des membres de la classe, tandis que les fonctions globales fonctions Les fonctions ne le peuvent pas.
  • 🎜Portée : 🎜Les fonctions amies peuvent être déclarées dans la déclaration de la classe, tandis que les fonctions globales sont déclarées en dehors de la classe.
  • 🎜Méthode de déclaration : 🎜Les fonctions Friend sont déclarées à l'aide du mot-clé friend, tandis que les fonctions globales sont déclarées à l'aide du mot-clé extern.
🎜🎜Cas pratique🎜🎜🎜Considérons une classe MyClass contenant une variable membre privée x : 🎜
Private data: 10
Copier après la connexion
🎜Pour accéder à MyClass <code>x de données privées, nous pouvons déclarer une fonction ami : 🎜rrreee🎜🎜Utilisation des fonctions ami🎜🎜🎜Nous pouvons utiliser les fonctions ami pour accéder à MyClass' Membre de données privées : 🎜rrreee🎜L'exécution de ce code affichera : 🎜rrreee

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