Rumah >pembangunan bahagian belakang >C++ >Mengapa 'Panggilan Fungsi Maya Tulen' Ranap Berlaku dalam Pembina dan Pemusnah?

Mengapa 'Panggilan Fungsi Maya Tulen' Ranap Berlaku dalam Pembina dan Pemusnah?

DDD
DDDasal
2024-11-11 17:28:02606semak imbas

Why Do

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!

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