Rumah >pembangunan bahagian belakang >C++ >Penjelasan terperinci tentang fungsi rakan C++: Bagaimana untuk menyekat hak capaian fungsi rakan?

Penjelasan terperinci tentang fungsi rakan C++: Bagaimana untuk menyekat hak capaian fungsi rakan?

WBOY
WBOYasal
2024-04-29 09:09:021078semak imbas

Fungsi rakan dalam C++ boleh menyekat hak akses melalui penentu akses atau ruang nama untuk membenarkan hanya fungsi atau fungsi tertentu dalam ruang nama tertentu untuk mengakses ahli peribadi kelas.

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

C++ Penjelasan terperinci tentang fungsi rakan: Bagaimana untuk menyekat hak akses fungsi rakan?

Dalam C++, fungsi rakan ialah fungsi khas yang membolehkan fungsi luaran mengakses ahli peribadi kelas. Ia membolehkan kami mengakses data peribadi atau fungsi satu kelas di luar kelas lain, sekali gus memberikan fleksibiliti yang lebih besar dalam situasi tertentu.

Sekat hak akses fungsi rakan

Kami boleh mengehadkan hak akses fungsi rakan kepada ahli persendirian dengan menyekat pengisytiharan rakan. Terdapat dua cara untuk melakukan ini:

Kaedah 1: Menggunakan penentu akses

Kami boleh menyekat akses fungsi rakan menggunakan penentu akses (awam, dilindungi atau peribadi). Sintaksnya adalah seperti berikut:

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

Kaedah 2: Menggunakan ruang nama

Anda juga boleh menggunakan ruang nama untuk mengehadkan keterlihatan fungsi rakan. Sintaksnya adalah seperti berikut:

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

Kes praktikal

Andaikan kita mempunyai dua kelas berikut:

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

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

Di sini, FriendClassPerson 类的友元类,因此它可以访问 nameage dan ahli persendirian yang lain.

Jalankan contoh

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

Output:

John Doe, 30

Atas ialah kandungan terperinci Penjelasan terperinci tentang fungsi rakan C++: Bagaimana untuk menyekat hak capaian fungsi rakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn