Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penjelasan terperinci tentang fungsi rakan C++: Apakah peranan fungsi rakan dalam pelbagai warisan?

Penjelasan terperinci tentang fungsi rakan C++: Apakah peranan fungsi rakan dalam pelbagai warisan?

WBOY
WBOYasal
2024-04-29 18:39:01890semak imbas

Fungsi rakan membenarkan fungsi bukan ahli mengakses ahli persendirian dan memainkan peranan dalam berbilang warisan, membenarkan fungsi kelas terbitan mengakses ahli persendirian kelas asas.

C++ 友元函数详解:友元函数在多继承中的作用?

C++ Penjelasan terperinci tentang fungsi rakan: Peranan fungsi rakan dalam pelbagai warisan

Pengenalan kepada fungsi rakan

Fungsi rakan ialah fungsi khas yang diberikan, dan Tiada kebenaran untuk mengakses fungsi peribadi objek kelas ini diperlukan. Ia sering digunakan untuk membenarkan fungsi bukan ahli mengakses data peribadi.

Sintaks:

class ClassName {
    ... // 类成员
    friend FunctionName;
};

Peranan rakan berfungsi dalam berbilang warisan

Dalam berbilang warisan, kelas terbitan boleh mewarisi ahli data dan kaedah daripada berbilang kelas asas. Jika fungsi dalam kelas terbitan perlu mengakses ahli persendirian kelas asas, fungsi itu boleh diisytiharkan sebagai fungsi rakan.

Kes praktikal

Andaikan kita mempunyai kelas Base dan kelas terbitan Derived yang mewarisi daripada Base: Base 类和一个从 Base 继承的派生类 Derived

class Base {
private:
    int data;
};

class Derived : public Base {
public:
    void printData() {
        std::cout << data << std::endl;
    }
    friend void printData2(Derived& obj);
};

由于 dataBase 的私有成员,Derived 中的 printData() 函数无法直接访问它。因此,我们将 printData2() 函数声明为 Derived 的友元函数:

void printData2(Derived& obj) {
    std::cout << obj.data << std::endl;
}

现在,printData2() 可以访问 Derived 中私有的 data

int main() {
    Derived obj;
    obj.printData();
    printData2(obj);
}

Disebabkan data ialah ahli peribadi Base dan tidak boleh diakses secara langsung oleh fungsi printData() dalam Derived. Oleh itu, kami mengisytiharkan fungsi printData2() sebagai fungsi rakan Derived:

0
0
Kini, printData2() boleh mengakses Ahli <code>data peribadi dalam Derived.

Penggunaan:

🎜rrreee🎜Output: 🎜rrreee

Atas ialah kandungan terperinci Penjelasan terperinci tentang fungsi rakan C++: Apakah peranan fungsi rakan dalam pelbagai warisan?. 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