Bolehkah Kelas Dalaman Mengakses Pembolehubah Peribadi?
Pertimbangkan kod C berikut:
class Outer { class Inner { public: Inner() {} void func(); }; private: static const char* const MYCONST; int var; }; void Outer::Inner::func() { var = 1; } const char* const Outer::MYCONST = "myconst";
Setelah disusun, ini kod menjana ralat: "kelas Luar:: Dalam' tidak mempunyai ahli bernama var'". Ini menimbulkan persoalan: bolehkah kelas dalam mengakses pembolehubah persendirian kelas luar?
Jawapan:
Ya, kelas dalam mempunyai akses kepada pembolehubah persendirian kelas yang disertakan . Ini kerana kelas dalam adalah rakan kelas tertutup mereka.
Walau bagaimanapun, tidak seperti Java, tiada hubungan langsung antara objek kelas dalam dan objek kelas merangkumi. Untuk mewujudkan sambungan ini, anda mesti mewujudkannya secara manual.
Penyelesaian:
Kod ubah suai berikut menyambungkan objek kelas dalam dan luar dengan menghantar rujukan kepada kelas luar kepada pembina kelas dalam:
#include <string> #include <iostream> class Outer { class Inner { public: Inner(Outer& x): parent(x) {} void func() { std::string a = "myconst1"; std::cout << parent.var << std::endl; if (a == 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(); }
Kod ini menghapuskan ralat penyusunan dan membenarkan kelas dalam mengakses pembolehubah persendirian kelas luar.
Atas ialah kandungan terperinci Bolehkah Kelas Dalaman Mengakses Pembolehubah Persendirian Kelas Luar dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!