Rumah > pembangunan bahagian belakang > C++ > Mengapakah Pembina Lalai Kelas Pangkalan Maya Dikenakan apabila Objek Kelas Terbitan Dimulakan?

Mengapakah Pembina Lalai Kelas Pangkalan Maya Dikenakan apabila Objek Kelas Terbitan Dimulakan?

Linda Hamilton
Lepaskan: 2024-11-20 04:22:02
asal
670 orang telah melayarinya

Why is the Default Constructor of a Virtual Base Class Invoked when a Derived Class Object is Instantiated?

Invokasi Pembina Lalai dalam Warisan Maya

Warisan maya, mekanisme pewarisan C, bertujuan untuk menyelesaikan masalah pewarisan berlian atau pewarisan berulang. Dalam konteks ini, satu persoalan timbul: mengapakah pembina lalai kelas asas maya digunakan apabila membuat instantiat objek kelas terbitan?

Tingkah laku ini berpunca daripada reka bentuk warisan maya. Tidak seperti pewarisan tradisional, di mana pembina kelas asas dipanggil oleh pembina kelas terbitan melalui senarai permulaan, dalam pewarisan maya, pembina kelas paling terbitan secara langsung memanggil pembina kelas asas maya.

Dalam contoh yang disediakan:

class grandmother {
public:
    grandmother() {
        std::cout << "grandmother (default)" << std::endl;
    }
    grandmother(int attr) {
        std::cout << "grandmother: " << attr << std::endl;
    }
};

class mother: virtual public grandmother {
public:
    mother(int attr) : grandmother(attr) {
        std::cout << "mother: " << attr << std::endl;
    }
};

class daughter: virtual public mother {
public:
    daughter(int attr) : mother(attr) {
        std::cout << "daughter: " << attr << std::endl;
    }
};
Salin selepas log masuk

Apabila membuat instantiat objek jenis anak perempuan, pembina anak perempuan terus memanggil pembina nenek. Walau bagaimanapun, oleh kerana tiada pembina khusus digunakan dalam senarai permulaan pembina anak perempuan, pembina lalai nenek dipanggil secara lalai.

Untuk memanggil pembina yang dikehendaki secara eksplisit, senarai permulaan pembina anak perempuan mesti diubah suai kepada:

daughter(int attr) : grandmother(attr), mother(attr) { ... }
Salin selepas log masuk

Dengan berbuat demikian, pembina nenek yang betul dipanggil, dan output akan menyertakan baris berikut:

grandmother: 0
Salin selepas log masuk

Memahami tingkah laku ini adalah penting apabila bekerja dengan maya warisan, kerana ia memastikan permulaan yang betul dan pembinaan objek.

Atas ialah kandungan terperinci Mengapakah Pembina Lalai Kelas Pangkalan Maya Dikenakan apabila Objek Kelas Terbitan Dimulakan?. 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