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
Lepaskan: 2024-11-12 12:25:01
asal
527 orang telah melayarinya

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
}
Salin selepas log masuk

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!

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