Pelaksanaan Fungsi Maya dan VJadual
Fungsi maya, lazim dalam C , menyediakan polimorfisme masa larian, membenarkan objek mengatasi kaedah yang diwarisi daripada asasnya kelas. Memahami pelaksanaannya pada tahap yang mendalam adalah penting untuk penggunaan yang berkesan.
Pelaksanaan vtable
Setiap kali kelas mengisytiharkan fungsi maya, jadual maya (vtable) dicipta. Vtable ini menyimpan alamat kepada fungsi maya dan khusus kelas. Setiap objek kepunyaan kelas itu mempunyai penunjuk maya (vptr) yang menunjuk ke alamat memori vtable. Semasa panggilan fungsi maya, vptr digunakan untuk menyelesaikan alamat fungsi.
Kebolehcapaian vtable
Vtable itu sendiri tidak boleh diakses secara langsung atau diubah suai pada masa jalan. Spesifikasi bahasa tidak memerlukan vtable, tetapi kebanyakan penyusun melaksanakannya untuk fungsi maya.
Vtable Existence
Vtables dicipta hanya untuk kelas dengan sekurang-kurangnya satu fungsi maya. Ini kerana mereka menanggung overhed ruang dan masa.
Kelas Abstrak dan jadual v
Kelas abstrak, dengan fungsi maya tulen yang tidak dilaksanakan, mempunyai jadual v yang tidak lengkap. Mereka menempah slot tetapi membiarkan penuding fungsi tidak ditetapkan.
Implikasi Prestasi
Memiliki fungsi maya hanya mempengaruhi panggilan fungsi itu sendiri, bukan keseluruhan kelas. Walau bagaimanapun, ia melibatkan overhed masa dalam menyelesaikan alamat fungsi melalui vtable. Mengatasi fungsi maya tidak meningkatkan masa pelaksanaannya.
Overhed Tambahan
Jika kelas terbitan mengatasi fungsi maya, ia mewujudkan jadual v baharu, meningkatkan ruang atas. Walau bagaimanapun, hanya fungsi yang diisytiharkan sebagai maya dikenakan penalti prestasi untuk menyelesaikan melalui vtable.
Atas ialah kandungan terperinci Bagaimanakah Fungsi Maya dan VTables Mendayakan Polimorfisme Masa Jalan dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!