Rumah >pembangunan bahagian belakang >C++ >Mengapa Ralat 'Panggilan Fungsi Maya Tulen' Menyebabkan Ranap Program?

Mengapa Ralat 'Panggilan Fungsi Maya Tulen' Menyebabkan Ranap Program?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-12 12:25:01490semak imbas

Why Do

Memahami Ranap "Panggilan Fungsi Maya Tulen"

Dalam pengaturcaraan, ralat "panggilan fungsi maya tulen" kadangkala boleh menyebabkan atur cara ranap secara tiba-tiba. Ralat ini timbul apabila percubaan dibuat untuk memanggil fungsi maya tulen semasa pembinaan atau pemusnahan objek.

Fungsi Maya Tulen

Fungsi maya tulen ialah fungsi ahli bagi kelas abstrak yang hanya mempunyai pengisytiharan tetapi tiada pelaksanaan. Ia memaksa kelas terbitan untuk melaksanakan versi fungsi mereka sendiri.

Penghadan Pembina dan Pemusnah

Fungsi pembina dan pemusnah dipanggil semasa pemulaan dan pemusnahan objek, masing-masing. Semasa fungsi khas ini, panggilan fungsi maya adalah dilarang kerana:

  • Pembina tidak boleh mengakses ahli kelas terbitan yang mungkin belum dibina.
  • Pemusnah tidak boleh mengakses ahli kelas terbitan yang mungkin sudah ada. musnah.

Sumber Ranap

Ranap "Panggilan fungsi maya tulen" berlaku apabila:

  • Anda secara eksplisit memanggil fungsi maya tulen daripada pembina atau pemusnah.
  • Anda secara tidak langsung memanggil fungsi maya tulen melalui fungsi yang dipanggil daripada pembina atau pemusnah.

Contoh

Pertimbangkan kod ini:

class Base
{
public:
    Base() { reallyDoIt(); }
    void reallyDoIt() { doIt(); } // DON'T DO THIS
    virtual void doIt() = 0;
};

class Derived : public Base
{
    void doIt() {}
};

int main(void)
{
    Derived d;  // This will cause "pure virtual function call" error
}

Dalam contoh ini, panggilan ke reallyDoIt() dalam Pangkalan pembina cuba memanggil fungsi maya tulen doIt(). Memandangkan pembina sedang dipanggil, objek kelas terbitan belum lagi dibina dan ralat "panggilan fungsi maya tulen" berlaku.

Resolusi

Untuk mengelakkan ini ranap sistem, elakkan memanggil fungsi maya tulen daripada pembina atau pemusnah. Sebaliknya, pastikan kelas terbitan menyediakan pelaksanaannya sendiri sebelum memanggil fungsi maya tulen.

Atas ialah kandungan terperinci Mengapa Ralat 'Panggilan Fungsi Maya Tulen' Menyebabkan Ranap Program?. 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