Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apakah kesan fungsi rakan terhadap warisan kelas?

Apakah kesan fungsi rakan terhadap warisan kelas?

PHPz
PHPzasal
2024-04-17 08:33:02805semak imbas

Warisan fungsi rakan Apabila subkelas mewarisi kelas dengan fungsi rakan: Subkelas tidak boleh mewarisi fungsi rakan. Fungsi rakan kelas induk boleh mengakses ahli peribadi kelas anak. Fungsi rakan subkelas tidak boleh mengakses ahli peribadi kelas induk.

Apakah kesan fungsi rakan terhadap warisan kelas?

Impak fungsi rakan pada warisan kelas

Preface

Fungsi rakan ialah fungsi C++ khas yang boleh mengakses ahli persendirian kelas di luar skop kelas. Apabila bercakap tentang pewarisan kelas, adalah penting untuk memahami tingkah laku fungsi rakan. Fungsi dan Warisan Rakan Subkelas tidak boleh mewarisi fungsi rakan kelas induk.

Fungsi rakan kelas induk boleh mengakses ahli persendirian kelas anak: Jika kelas induk dan kelas anak mengenali satu sama lain (iaitu, kelas induk ialah kelas asas kelas anak atau kelas anak ialah kelas terbitan kelas induk), maka fungsi Rakan kelas induk kelas boleh mengakses ahli peribadi subkelas tersebut.

Fungsi rakan subkelas tidak boleh mengakses ahli persendirian kelas induk:
    Sebaliknya, fungsi rakan subkelas
  • tidak boleh mengakses ahli persendirian kelas induk, walaupun kelas induk dan kelas anak tahu satu sama lain.
  • Kes praktikal
  • Pertimbangkan kod contoh berikut:
    #include <iostream>
    
    class Base {
      friend void print(Base& b);  // 父类友元函数
    private:
      int x;
    };
    
    class Derived : public Base {
      friend void access(Derived& d);  // 子类友元函数
    private:
      int y;
    };
    
    void print(Base& b) { std::cout << b.x << std::endl; } // 父类友元函数访问私有成员 x
    
    void access(Derived& d) { std::cout << d.x << " " << d.y << std::endl; } // 子类友元函数访问私有成员 x 和 y
    
    int main() {
      Base b;
      b.x = 10;
      print(b);  // 输出:10
    
      Derived d;
      d.x = 20;
      d.y = 30;
      access(d);  // 输出:20 30
      print(d);  // 输出:20
    }
    Dalam contoh ini:
  • Kelas induk Asas mempunyai fungsi rakan cetak() , yang mempunyai akses kepada x ahli peribadi.

Subkelas Derived mempunyai fungsi rakan access(), yang boleh mengakses ahli persendirian kelas induk x. Objek d subclass Derived boleh diakses oleh kelas induk Base fungsi rakan print() , tetapi Tidak dapat mengakses ahli peribadi x kelas induk.

Atas ialah kandungan terperinci Apakah kesan fungsi rakan terhadap warisan kelas?. 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