Rumah > pembangunan bahagian belakang > C++ > 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
Lepaskan: 2024-11-03 14:31:02
asal
980 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan