Rumah >pembangunan bahagian belakang >C++ >Mengapakah Pembina Lalai Kelas Nenek Dipanggil dalam Warisan Maya?

Mengapakah Pembina Lalai Kelas Nenek Dipanggil dalam Warisan Maya?

DDD
DDDasal
2024-11-16 22:22:03940semak imbas

Why is the Grandmother Class's Default Constructor Called in Virtual Inheritance?

Mengapa Pembina Lalai Dipanggil dalam Warisan Maya?

Apabila mencipta objek baharu kelas anak perempuan menggunakan warisan maya, pembina lalai bagi kelas nenek tanpa diduga dipanggil. Tingkah laku ini mungkin kelihatan berlawanan dengan intuitif, memandangkan pengguna secara eksplisit memanggil pembina kelas ibu dengan hujah.

Penjelasan:

Dalam warisan maya, pembina pangkalan maya kelas dipanggil secara langsung oleh pembina kelas paling banyak terbitan. Dalam kod yang diberikan, kelas anak perempuan ialah kelas paling banyak terbitan dan, oleh itu, ia secara langsung memanggil pembina nenek.

Memandangkan kelas anak perempuan tidak memberikan sebarang hujah kepada pembina nenek dalam senarai permulaan, nilai lalai pembina kelas nenek dipanggil secara automatik. Ini kerana, secara lalai, pengkompil menganggap bahawa pembina lalai harus digunakan apabila tiada pembina khusus digunakan.

Penyelesaian:

Untuk memanggil pembina nenek yang dikehendaki dengan hujah, senarai permulaan pembina kelas anak perempuan mesti dikemas kini secara eksplisit. Kod yang betul ialah:

daughter(int attr) : grandmother(attr), mother(attr) { ... }

Ini memastikan bahawa pembina nenek dipanggil dengan hujah yang ditentukan. Sebagai alternatif, kelas nenek boleh menyediakan pembina lalai yang menerima hujah.

Atas ialah kandungan terperinci Mengapakah Pembina Lalai Kelas Nenek Dipanggil dalam Warisan Maya?. 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