Pemulaan Pembolehubah Ahli Kelas Asas dalam Pembina Kelas Terbitan
Apabila bekerja dengan warisan kelas, persoalan biasa timbul: bagaimana untuk memulakan kelas asas pembolehubah ahli dalam pembina kelas terbitan. Percubaan awal untuk berbuat demikian boleh membawa kepada kekeliruan, seperti yang ditunjukkan di bawah:
class A { public: int a, b; }; class B : public A { B() : A(), a(0), b(0) { } };
Kod ini gagal untuk disusun, menimbulkan persoalan: mengapa kita tidak boleh memulakan a dan b dalam B?
Alasannya terletak pada fakta bahawa a dan b bukan ahli B. Mereka tergolong dalam kelas asas A. Hanya A yang boleh memulakan ahlinya sendiri pembolehubah.
Satu penyelesaian yang mungkin ialah menjadikan a dan b ahli awam A, membenarkan B untuk menetapkan nilai secara langsung. Walau bagaimanapun, ini tidak disyorkan kerana ia melanggar prinsip enkapsulasi.
Sebaliknya, pendekatan yang lebih mantap ialah mentakrifkan pembina dalam A yang membenarkan kelas terbitan untuk menentukan nilai permulaan. Ini boleh dicapai dengan menjadikan pembina dilindungi dan boleh diakses oleh subkelas:
class A { protected: A(int a, int b) : a(a), b(b) {} // Accessible to derived classes private: int a, b; // Keep variables private within A }; class B : public A { public: B() : A(0, 0) // Calls A's constructor, setting a and b to 0 within A { } };
Penyelesaian ini memastikan a dan b dimulakan dengan betul dalam A, menjamin integriti dan pengkapsulan data.
Atas ialah kandungan terperinci Bagaimana untuk Memulakan Pembolehubah Ahli Kelas Asas dengan Betul dalam Pembina Kelas Terbitan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!