Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Pembolehubah Ahli Kelas Asas Harus Dimulakan dalam Pembina Kelas Terbitan?
Pemulaan Pembolehubah Ahli Kelas Asas dalam Pembina Kelas Terbitan
Dalam pengaturcaraan berorientasikan objek, warisan membenarkan kelas terbitan untuk mewarisi sifat dan tingkah laku daripada kelas asas. Walau bagaimanapun, memulakan pembolehubah ahli kelas asas dalam pembina kelas terbitan kadangkala boleh menimbulkan cabaran.
Mengapa Pembolehubah Ahli Kelas Asas Tidak Boleh Dimulakan dalam Pembina Kelas Terbitan?
Pertimbangkan contoh berikut:
class A { public: int a, b; }; class B : public A { B() : A(), a(0), b(0) { } };
Dalam kod ini, kelas B cuba untuk memulakan ahli kelas asas pembolehubah a dan b dalam pembinanya sendiri menggunakan sintaks : A(), a(0), b(0). Walau bagaimanapun, pendekatan ini tidak betul. Sebabnya ialah a dan b bukan ahli kelas B melainkan kelas A. Hanya kelas A boleh memulakan terus pembolehubah ini.
Amalan Terbaik untuk Permulaan
Untuk menangani isu ini, terdapat beberapa pendekatan yang disyorkan:
class A { public: int a, b; }; class B : public A { B() : a(0), b(0) { } };
Walau bagaimanapun, adalah tidak dinasihatkan untuk membuat pembolehubah ahli awam kerana ia melanggar prinsip enkapsulasi dan keselamatan.
class A { protected: A(int a, int b) : a(a), b(b) {} // Accessible to derived classes private: int a, b; // Keep these variables private in A }; class B : public A { public: B() : A(0, 0) // Calls A's constructor, initializing a and b in A to 0. { } };
Pendekatan ini membolehkan kelas terbitan untuk memulakan pembolehubah ahli kelas asas dengan menggunakan pembina kelas asas dengan nilai awal yang dikehendaki.
Atas ialah kandungan terperinci Bagaimanakah Pembolehubah Ahli Kelas Asas Harus Dimulakan dalam Pembina Kelas Terbitan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!