Rumah >pembangunan bahagian belakang >C++ >Bolehkah Kelas Dalaman dalam C Mengakses Ahli Persendirian Kelas Luar Mereka?
Bolehkah Kelas Dalaman Mengakses Pembolehubah Peribadi?
Dalam contoh kod ini, kelas dalam, Dalaman, ditakrifkan dalam kelas luar, Luar . Apabila tika Inner dicipta, ia dijangka mempunyai akses kepada var pembolehubah ahli persendirian kelas Luar. Walau bagaimanapun, apabila disusun, ralat berlaku, menyatakan bahawa Inner tidak mempunyai ahli bernama var.
Kelas Dalaman dan Akses Ahli
Kelas dalaman dalam C dianggap sebagai rakan daripada kelas luarnya. Sebagai rakan, kelas dalaman mempunyai akses kepada semua ahli kelas luar, termasuk ahli persendirian. Oleh itu, contoh Inner sepatutnya boleh mengakses var peribadi Outer.
Masalah dan Penyelesaiannya
Ralat berpunca daripada kekurangan sambungan antara contoh Dalaman dan kejadian Luaran. Di Jawa, terdapat hubungan ibu bapa-anak yang tersirat antara kelas dalaman dan kelas lampirannya. Walau bagaimanapun, dalam C , perhubungan ini mesti ditakrifkan secara eksplisit.
Untuk menyelesaikan isu tersebut, rujukan kepada kelas luar mesti diserahkan kepada pembina kelas dalam. Ini memberikan kelas dalam konteks yang diperlukan untuk mengakses ahli kelas luar.
Berikut ialah contoh yang menunjukkan cara mewujudkan sambungan induk-anak dan membenarkan Inner mengakses var pembolehubah persendirian Luar:
#include <string> #include <iostream> class Outer { public: class Inner { public: Inner(Outer& x): parent(x) {} // Pass a reference to the outer class void func() { std::string a = "myconst1"; std::cout << parent.var << std::endl; if (a == Outer::MYCONST) std::cout << "string same" << std::endl; else std::cout << "string not same" << std::endl; } private: Outer& parent; }; public: Outer(): i(*this), var(4) {} Outer(Outer& other): i(other), var(22) {} void func() { i.func(); } private: static const char* const MYCONST; Inner i; int var; }; const char* const Outer::MYCONST = "myconst"; int main() { Outer o1; Outer o2(o1); o1.func(); o2.func(); return 0; }
Kod yang disemak ini membenarkan Inner mengakses var kerana pembina Inner mewujudkan hubungan ibu bapa-anak antara Inner dan Outer instance yang menciptanya.
Atas ialah kandungan terperinci Bolehkah Kelas Dalaman dalam C Mengakses Ahli Persendirian Kelas Luar Mereka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!