Maison  >  Article  >  développement back-end  >  Explication détaillée des fonctions amies C++ : Comment restreindre les droits d'accès des fonctions amies ?

Explication détaillée des fonctions amies C++ : Comment restreindre les droits d'accès des fonctions amies ?

WBOY
WBOYoriginal
2024-04-29 09:09:021021parcourir

Les fonctions Friends en C++ peuvent restreindre les droits d'accès via des spécificateurs d'accès ou des espaces de noms pour autoriser uniquement des fonctions spécifiques ou des fonctions au sein d'un espace de noms spécifique à accéder aux membres privés d'une classe.

C++ 友元函数详解:如何限制友元函数的访问权限?

C++ Explication détaillée des fonctions amis : Comment restreindre les droits d'accès des fonctions amis ?

En C++, une fonction ami est une fonction spéciale qui permet aux fonctions externes d'accéder aux membres privés d'une classe. Il nous permet d'accéder à des données privées ou à des fonctions d'une classe en dehors d'une autre classe, offrant ainsi une plus grande flexibilité dans certaines situations.

Restreindre les droits d'accès aux fonctions amis

Nous pouvons limiter les droits d'accès aux fonctions amis aux membres privés en restreignant les déclarations d'amis. Il existe deux manières de procéder :

Méthode 1 : Utiliser des spécificateurs d'accès

Nous pouvons restreindre l'accès des fonctions d'amis à l'aide de spécificateurs d'accès (publics, protégés ou privés). La syntaxe est la suivante :

class MyClass {
  private:
    // 私有成员只能被友元函数访问
    friend void friendFunction();
};

Méthode 2 : Utiliser des espaces de noms

Vous pouvez également utiliser des espaces de noms pour limiter la visibilité des fonctions amis. La syntaxe est la suivante :

namespace MyNamespace {
  class MyClass {
    private:
      // 私有成员由 MyNameSpace 命名空间内部所有友元函数访问
      friend class MyFriendClass;
  };
}

Cas pratique

Supposons que nous ayons les deux classes suivantes :

class Person {
  private:
    string name;
    int age;
};

class FriendClass {
  public:
    // 可以访问私有成员,因为它是一个友元类
    void printPersonDetails(Person person) {
      cout << person.name << ", " << person.age << endl;
    }
};

Ici, FriendClassPerson 类的友元类,因此它可以访问 nameage et d'autres membres privés.

Exécutez l'exemple

int main() {
  Person person{"John Doe", 30};
  FriendClass friendObj;  
  friendObj.printPersonDetails(person);
  return 0;
}

Sortie :

John Doe, 30

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!

Déclaration:
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