Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Kelas Terbitan Boleh Memanfaatkan Pembina Kelas Asas dan Operator Tugasan?

Bagaimanakah Kelas Terbitan Boleh Memanfaatkan Pembina Kelas Asas dan Operator Tugasan?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-03 14:31:02885semak imbas

How Can Derived Classes Leverage Base Class Constructors and Assignment Operators?

Menggunakan Pembina Kelas Asas dan Operator Tugasan dalam Kelas Terbitan

Dalam C , warisan membenarkan kelas terbitan mewarisi ciri tertentu kelas asasnya. Walau bagaimanapun, jika kelas terbitan memerlukan set pembina dan pengendali tugasan yang sama seperti kelas asasnya, mungkin perlu untuk menulis semula fungsi ini dalam kelas terbitan. Ini boleh menjadi tugas yang membosankan, terutamanya bagi pengendali tugasan yang memerlukan akses kepada pembolehubah ahli persendirian.

Nasib baik, terdapat penyelesaian alternatif. Kelas terbitan boleh memanggil pembina kelas asas dan pengendali tugasan secara eksplisit. Teknik ini membolehkan mereka menggunakan pelaksanaan sedia ada tanpa perlu menulis semula.

Pertimbangkan contoh kod berikut:

<code class="cpp">class Base {
public:
    Base();
    Base(const string& s);
    Base(const Base& b) { (*this) = b; }
    Base& operator=(const Base & b);

private:
    // ... (private member variables and functions)
};

class Derived : public Base {
public:
    // Override the "foo" function without modifying other aspects of the base class
    virtual void foo() override;
};</code>

Dalam contoh ini, Derived mewarisi pembina dan pengendali tugasan Base. Ia tidak perlu mentakrifkan fungsi ini secara eksplisit. Sebaliknya, apabila membina objek Terbitan atau menetapkan objek Asas kepada objek Terbitan, pengkompil secara automatik memanggil pembina kelas asas atau pengendali tugasan yang sesuai.

Strategi yang sama boleh digunakan untuk pengendali tugasan:

<code class="cpp">class Base {
public:
    // ... (private member variables and functions)
    Base(const Base& b) { /* ... */ }
    Base& operator=(const Base& b) { /* ... */ }
};

class Derived : public Base {
public:
    int additional_;

    // Call the base assignment operator within the derived operator
    Derived& operator=(const Derived& d) {
        Base::operator=(d);
        additional_ = d.additional_;
        return *this;
    }
};</code>

Teknik ini membolehkan kelas terbitan menggunakan sepenuhnya fungsi kelas asas mereka sambil hanya mengatasi atau menambah gelagat yang diperlukan. Ia memudahkan pewarisan dengan menghapuskan keperluan untuk menulis semula pembina kelas asas yang kompleks atau pengendali tugasan.

Atas ialah kandungan terperinci Bagaimanakah Kelas Terbitan Boleh Memanfaatkan Pembina Kelas Asas dan Operator Tugasan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn