Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Kelas Dalaman dalam C Boleh Mengakses Ahli Persendirian Kelas Terlampirnya?
Kelas Dalaman Mengakses Pembolehubah Peribadi dalam C
Dalam C , kelas dalam mempunyai keupayaan unik untuk mengakses ahli persendirian kelas tertutup. Pertimbangkan contoh berikut:
class Outer { class Inner { public: Inner() {} void func(); }; private: static const char* const MYCONST; int var; };
Dalam contoh ini, kelas Dalam ditakrifkan dalam kelas Luar. Mengikut peraturan skop tradisional, pembolehubah ahli var Luar tidak boleh diakses oleh Dalam. Walau bagaimanapun, dalam C , kelas dalam sememangnya rakan kelas tertutupnya.
Akibatnya, objek jenis Outer::Inner boleh mengakses pembolehubah ahli persendirian Outer. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa akses ini hanya diberikan dalam skop kelas dalam.
Untuk menggambarkan lagi konsep ini, mari kita ubah suai kaedah func() kelas Dalam seperti berikut:
void Outer::Inner::func() { var = 1; }
Sekarang, jika kami cuba menyusun kod ini, kami akan menemui mesej ralat yang menunjukkan bahawa 'kelas Luar:: Dalam' tidak mempunyai ahli bernama 'var'. Ini kerana walaupun kelas dalaman mempunyai akses kepada ahli persendirian, mereka tidak mewarisi perhubungan ahli dengan kelas yang disertakan.
Untuk mewujudkan perhubungan ahli yang betul dalam kelas dalaman, kita perlu membuat rujukan secara manual kepada melampirkan kelas, seperti yang ditunjukkan dalam contoh berikut:
class Outer { class Inner { public: Inner(Outer& x): parent(x) {} void func() { std::cout << parent.var << std::endl; } private: Outer& parent; }; public: Outer() : i(*this), var(4) {} void func() { i.func(); } private: Inner i; int var; }; int main() { Outer o; o.func(); }
Dalam contoh ini, pembina kelas Dalam mengambil rujukan kepada kelas Luar sebagai hujah. Ini membenarkan objek jenis Outer::Inner mengakses ahli peribadi Outer melalui rujukan induk.
Atas ialah kandungan terperinci Bagaimanakah Kelas Dalaman dalam C Boleh Mengakses Ahli Persendirian Kelas Terlampirnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!