Rumah >pembangunan bahagian belakang >C++ >Interaksi antara fungsi rakan C++ dan fungsi maya

Interaksi antara fungsi rakan C++ dan fungsi maya

王林
王林asal
2024-04-16 15:45:01559semak imbas

Dalam C++, fungsi rakan berinteraksi dengan fungsi maya supaya fungsi rakan boleh mengakses fungsi maya dan memanggil fungsi rakan dalam kelas terbitan untuk mengakses ahli persendirian kelas asas. Interaksi ini boleh digunakan untuk mengakses data yang tersembunyi dalam hierarki warisan atau untuk melaksanakan tingkah laku polimorfik.

C++ 友元函数与虚函数的交互

Interaksi antara fungsi rakan dan fungsi maya dalam C++

Dalam C++, fungsi rakan ialah fungsi yang boleh mengakses ahli peribadi dan dilindungi kelas. Fungsi maya membenarkan kelas terbitan untuk mengatasi kaedah kelas asas. Interaksi antara fungsi rakan dan fungsi maya boleh dicapai dengan cara berikut:

Kes 1: Fungsi rakan dan fungsi maya diakses pada masa yang sama

Apabila fungsi rakan dan fungsi maya mengakses ahli kelas pada masa yang sama, fungsi rakan perlu dinyatakan secara eksplisit Fungsi maya kelas yang sedang diakses.

class Base {
public:
  virtual void foo() { std::cout << "Base::foo()\n"; }
};

class Derived : public Base {
public:
  virtual void foo() override { std::cout << "Derived::foo()\n"; }
};

class Friend {
public:
  static void callFoo(Base& base) { base.foo(); } // 调用 Base::foo()
  static void callFoo(Derived& derived) { derived.foo(); } // 调用 Derived::foo()
};

Kes 2: Panggilan fungsi rakan dalam fungsi maya

Fungsi maya dalam kelas terbitan boleh memanggil fungsi rakan untuk mengakses ahli peribadi atau dilindungi kelas asas.

class Base {
public:
  virtual void foo();
friend class Derived;
};

class Derived : public Base {
public:
  virtual void foo() override {
    // 调用友元函数访问 Base 的私有成员
    std::cout << m_privateMember << "\n";
  }

private:
  int m_privateMember;
};

Kes praktikal: mengakses data tersembunyi

Fungsi rakan dan fungsi maya boleh digunakan secara gabungan untuk mengakses data tersembunyi dalam sistem pewarisan.

rreeee

Atas ialah kandungan terperinci Interaksi antara fungsi rakan C++ dan fungsi maya. 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