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 */ };
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!