Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Memulakan Pembolehubah Ahli Kelas Asas dengan Betul daripada Pembina Kelas Terbitan?

Bagaimanakah Saya Boleh Memulakan Pembolehubah Ahli Kelas Asas dengan Betul daripada Pembina Kelas Terbitan?

Patricia Arquette
Patricia Arquetteasal
2024-12-06 08:09:13409semak imbas

How Can I Properly Initialize Base Class Member Variables from a Derived Class Constructor?

Menggunakan Warisan untuk Permulaan Pembolehubah Ahli

Dalam pengaturcaraan berorientasikan objek, tugas biasa ialah memulakan pembolehubah ahli kelas asas dalam pembina kelas terbitan. Walau bagaimanapun, senario tertentu mungkin menghalang permulaan ini. Mari kita terokai satu senario sedemikian dan penyelesaian yang disyorkan.

Pertimbangkan coretan kod berikut:

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

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

};

Di sini, atur cara cuba untuk memulakan pembolehubah ahli a dan b kelas asas A dalam pembina bagi kelas terbitan B. Walau bagaimanapun, pendekatan ini akan gagal dengan ralat penyusunan.

Sebabnya kerana ralat ini terletak pada fakta bahawa a dan b bukan ahli B. Mereka adalah ahli kelas asas A. Oleh itu, hanya pembina A mempunyai kuasa untuk memulakannya.

Daripada memulakan secara langsung a dan b dalam pembina kelas terbitan, penyelesaian yang lebih berkesan ialah mengisytiharkan mereka sebagai ahli yang dilindungi dalam kelas asas dan menggunakan pembina dalam kelas asas untuk permulaan. Pendekatan ini membenarkan kelas terbitan mengakses dan memulakan pembolehubah ini melalui pewarisan.

Berikut ialah coretan kod yang disemak yang menunjukkan pendekatan yang dipertingkatkan ini:

class A 
{
protected:
    A(int a, int b) : a(a), b(b) {} // Accessible to derived classes
    // Change "protected" to "public" to allow others to instantiate A.
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.
    {
    } 
};

Dalam kod yang disemak ini, pembina asas kelas A mengambil dua hujah integer dan memulakan pembolehubah ahli a dan b dengan sewajarnya. Kelas terbitan B mewarisi pembina terlindung A dan memanggilnya dalam pembinanya sendiri untuk memulakan a dan b dengan nilai lalai 0.

Pendekatan ini memastikan permulaan pembolehubah ahli yang betul sambil mengekalkan pengkapsulan dan mematuhi prinsip pengaturcaraan berorientasikan objek.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memulakan Pembolehubah Ahli Kelas Asas dengan Betul daripada 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