Rumah > pembangunan bahagian belakang > C++ > Mengapa Warisan Maya Menyebabkan Ralat Permulaan Pembina dalam C ?

Mengapa Warisan Maya Menyebabkan Ralat Permulaan Pembina dalam C ?

Susan Sarandon
Lepaskan: 2024-12-13 14:16:10
asal
284 orang telah melayarinya

Why Does Virtual Inheritance Cause Constructor Initialization Errors in C  ?

Warisan Maya dan Permulaan Pembina

Warisan maya ialah teknik yang digunakan dalam C untuk menyelesaikan kekaburan warisan berbilang. Apabila kelas mewarisi daripada berbilang kelas asas, yang mempunyai ahli yang sama, warisan maya memastikan bahawa hanya satu salinan ahli itu dicipta, mengurangkan overhed memori.

Walau bagaimanapun, warisan maya memperkenalkan situasi unik apabila ia datang. kepada pemula pembina. Dalam contoh yang diberikan, kita mempunyai tiga kelas: Base, A, dan B, di mana kedua-dua A dan B hampir mewarisi daripada Base. Kelas C kemudian mewarisi daripada kedua-dua A dan B.

Masalahnya

Dalam pembina kelas C, ralat berlaku semasa pemulaan Base. Pengkompil tidak boleh memadankan panggilan fungsi ke Base() kerana C tidak mewarisi secara langsung daripada Base. Jadi mengapa ralat ini berlaku?

Memahami Permulaan Kelas Asas Maya

Kelas asas maya mempunyai proses pemula yang berbeza berbanding kelas asas bukan maya. Apabila kelas asas maya diwarisi, adalah tanggungjawab kelas yang paling banyak untuk memulakannya. Dalam kes ini, kelas C ialah kelas yang paling banyak terbitan, dan ia mesti memulakan Pangkalan kelas asas maya.

Memandangkan Base tidak mempunyai tika langsung C, ia tidak boleh dimulakan menggunakan pembina A atau B. Sebaliknya, Base mesti dimulakan menggunakan pembina lalainya. Walau bagaimanapun, kod yang disediakan tidak termasuk pembina lalai untuk Base.

Penyelesaian

Untuk menyelesaikan isu ini, anda perlu mentakrifkan pembina lalai dalam kelas Base , seperti ini:

class Base {
public:
  Base() = default; // Default constructor added
  Base(Base* pParent);
  /* implements basic stuff */
};
Salin selepas log masuk

Pembina lalai ini akan digunakan untuk memulakan pembolehubah ahli maya Base dalam kelas C.

Atas ialah kandungan terperinci Mengapa Warisan Maya Menyebabkan Ralat Permulaan Pembina dalam C ?. 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