Dalam pengaturcaraan berorientasikan objek, pewarisan membenarkan kelas mewarisi sifat dan kaedah kelas asasnya. Ciri berkuasa ini membolehkan penggunaan semula dan kebolehselenggaraan kod. Walau bagaimanapun, pengendalian pembina dan pengendali tugasan dalam kelas yang diwarisi boleh menjadi mencabar.
Pertimbangkan kelas B dengan set pembina dan pengendali tugasan. Matlamatnya ialah untuk mencipta kelas D yang mewarisi yang menggantikan foo() tetapi mengekalkan pembina dan pengendali tugasan B.
Satu cara untuk mencapai ini ialah dengan memanggil pembina dan pengendali tugasan secara eksplisit dalam D. Ini melibatkan penggunaan pembina kelas asas yang sesuai secara manual semasa mencipta kejadian D dan menggunakan Base::operator=() untuk menetapkan nilai dalam pengendali tugasan.
<code class="cpp">class Base { // ... public: Base(const Base&) { /*...*/ } Base& operator=(const Base&) { /*...*/ } }; class Derived : public Base { int additional_; public: Derived(const Derived& d) : Base(d) // dispatch to base copy constructor , additional_(d.additional_) { } Derived& operator=(const Derived& d) { Base::operator=(d); additional_ = d.additional_; return *this; } };</code>
Menariknya, walaupun tanpa mentakrifkan pembina dan pengendali tugasan secara eksplisit, pengkompil boleh menjananya secara automatik. Ini adalah kes bagi kelas dengan warisan mudah dan penyesuaian minimum.
<code class="cpp">class ImplicitBase { int value_; // No operator=() defined }; class Derived : public ImplicitBase { const char* name_; public: Derived& operator=(const Derived& d) { ImplicitBase::operator=(d); // Call compiler generated operator= name_ = strdup(d.name_); return *this; } }; </code>
Oleh itu, apabila mewarisi daripada kelas asas yang menyediakan set pembina yang komprehensif dan pengendali tugasan, adalah mungkin untuk menggunakannya dalam kelas terbitan tanpa perlu menulis semulanya, selagi tiada fungsi tambahan diperlukan dalam fungsi tersebut.
Atas ialah kandungan terperinci Bagaimanakah cara saya menggunakan Pembina Kelas Asas dan Operator Tugasan dalam Kelas Terbitan dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!