Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Memulakan Pembolehubah Ahli Kelas Asas dengan Betul dalam Pembina Kelas Terbitan?

Bagaimana untuk Memulakan Pembolehubah Ahli Kelas Asas dengan Betul dalam Pembina Kelas Terbitan?

Barbara Streisand
Lepaskan: 2024-12-10 21:54:12
asal
258 orang telah melayarinya

How to Properly Initialize Base Class Member Variables in a Derived Class Constructor?

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) {
    }
};
Salin selepas log masuk

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

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!

sumber:php.cn
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