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.
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.
rreeeeAtas ialah kandungan terperinci Interaksi antara fungsi rakan C++ dan fungsi maya. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!