Rumah > Artikel > pembangunan bahagian belakang > Mengapa "Panggilan Fungsi Maya Tulen" Ranap Berlaku dalam Pembina dan Pemusnah?
Menyingkap Enigma Ranap "Panggilan Fungsi Maya Tulen"
Apabila menghadapi mesej ralat samar "panggilan fungsi maya tulen", pengguna boleh tertanya-tanya bagaimana program berjaya menyusun walaupun ketidakupayaan untuk membuat instantiate objek kelas abstrak. Isu ini berpunca daripada percubaan untuk menggunakan fungsi maya dalam pembina atau pemusnah.
Dilema Pengkompil:
Semasa penciptaan objek, pembina bertanggungjawab untuk memulakan keadaan objek. Sebaliknya, pemusnah mengendalikan pemusnahan objek. Walau bagaimanapun, panggilan fungsi maya tidak boleh dibuat semasa peringkat ini kerana objek kelas terbitan sama ada tidak lengkap atau tidak wujud.
Dalam kes sedemikian, pengkompil menggunakan versi kelas asas bagi fungsi maya. Walau bagaimanapun, oleh kerana fungsi maya tulen kekurangan pelaksanaan dalam kelas asas, ini mengakibatkan ralat "panggilan fungsi maya tulen" yang terkenal.
Cetikan Kod untuk Digambarkan:
Pertimbangkan contoh C berikut:
class Base { public: Base() { reallyDoIt(); // INCORRECT, doesn't work } void reallyDoIt() { doIt(); } // INCORRECT, doesn't work virtual void doIt() = 0; // Pure virtual function }; class Derived : public Base { void doIt() {} // Overrides pure virtual function }; int main() { Derived d; // Causes "pure virtual function call" error }
Apabila membuat instantiated kelas Terbitan, program cuba memanggil reallyDoIt() daripada pembina, yang seterusnya memanggil doIt(). Memandangkan doIt() ialah fungsi maya tulen, tiada pelaksanaan dalam kelas asas, yang membawa kepada ralat maut.
Kesimpulan:
Untuk mengelakkan "maya tulen fungsi panggilan" ranap, adalah penting untuk mengelak daripada membuat panggilan fungsi maya dalam pembina atau pemusnah. Ini memastikan bahawa hanya kaedah khusus untuk kelas terbitan dipanggil semasa penciptaan dan pemusnahan objek, menghalang seruan fungsi yang tidak ditentukan dalam kelas asas.
Atas ialah kandungan terperinci Mengapa "Panggilan Fungsi Maya Tulen" Ranap Berlaku dalam Pembina dan Pemusnah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!