Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Pembolehubah Ahli Kelas Asas Harus Dimulakan dalam Pembina Kelas Terbitan?

Bagaimanakah Pembolehubah Ahli Kelas Asas Harus Dimulakan dalam Pembina Kelas Terbitan?

Susan Sarandon
Susan Sarandonasal
2024-12-05 04:20:10559semak imbas

How Should Base Class Member Variables Be Initialized in Derived Class Constructors?

Pemulaan Pembolehubah Ahli Kelas Asas dalam Pembina Kelas Terbitan

Dalam pengaturcaraan berorientasikan objek, warisan membenarkan kelas terbitan untuk mewarisi sifat dan tingkah laku daripada kelas asas. Walau bagaimanapun, memulakan pembolehubah ahli kelas asas dalam pembina kelas terbitan kadangkala boleh menimbulkan cabaran.

Mengapa Pembolehubah Ahli Kelas Asas Tidak Boleh Dimulakan dalam Pembina Kelas Terbitan?

Pertimbangkan contoh berikut:

class A
{
public:
    int a, b;
};

class B : public A
{
    B() : A(), a(0), b(0)
    {
    }

};

Dalam kod ini, kelas B cuba untuk memulakan ahli kelas asas pembolehubah a dan b dalam pembinanya sendiri menggunakan sintaks : A(), a(0), b(0). Walau bagaimanapun, pendekatan ini tidak betul. Sebabnya ialah a dan b bukan ahli kelas B melainkan kelas A. Hanya kelas A boleh memulakan terus pembolehubah ini.

Amalan Terbaik untuk Permulaan

Untuk menangani isu ini, terdapat beberapa pendekatan yang disyorkan:

  • Jadikan Ahli Kelas Asas Awam: Satu pendekatan adalah untuk menjadikan pembolehubah ahli kelas asas awam, seperti yang dilihat di bawah:
class A
{
public:
    int a, b;
};

class B : public A
{
    B() : a(0), b(0)
    {
    }

};

Walau bagaimanapun, adalah tidak dinasihatkan untuk membuat pembolehubah ahli awam kerana ia melanggar prinsip enkapsulasi dan keselamatan.

  • Buat Pembina Kelas Asas untuk Permulaan: Pendekatan yang lebih selamat dan disyorkan ialah mencipta pembina dalam kelas asas yang membenarkan kelas terbitan untuk memulakan pembolehubah ahli kelas asas. Contohnya:
class A 
{
protected:
    A(int a, int b) : a(a), b(b) {} // Accessible to derived classes
private:
    int a, b; // Keep these variables private in A
};

class B : public A 
{
public:
    B() : A(0, 0) // Calls A's constructor, initializing a and b in A to 0.
    {
    } 
};

Pendekatan ini membolehkan kelas terbitan untuk memulakan pembolehubah ahli kelas asas dengan menggunakan pembina kelas asas dengan nilai awal yang dikehendaki.

Atas ialah kandungan terperinci Bagaimanakah Pembolehubah Ahli Kelas Asas Harus Dimulakan dalam Pembina Kelas Terbitan?. 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