Cara Fungsi Maya dan Vtables Berfungsi dalam C
Fungsi maya ialah aspek asas pengaturcaraan berorientasikan objek, membenarkan objek daripada kelas terbitan mengatasi kaedah yang diwarisi daripada kelas asas. Tetapi bagaimanakah fungsi maya dilaksanakan di bawah permukaan?
Pelaksanaan Vtable
Apabila kelas mentakrifkan fungsi maya, pengkompil menjana vtable ( jadual fungsi maya). Jadual ini menyimpan penunjuk kepada semua fungsi maya untuk kelas tersebut. Setiap tika objek mempunyai vptr (penunjuk maya) yang menunjuk ke alamat asas vtable kelasnya.
Akses dan Pengubahsuaian Vtable
Mengakses atau mengubah suai vtable pada masa jalan biasanya dianggap tidak selamat dalam C . Takrif bahasa tidak mewajibkan penggunaan vtables, dan pelaksanaan yang berbeza mungkin mempunyai tingkah laku yang berbeza-beza. Dalam kebanyakan kes, vtable hanya wujud untuk kelas dengan fungsi maya dan tidak boleh diubah suai secara langsung.
Vtables dan Kelas Abstrak
Kelas abstrak mempunyai fungsi maya tulen, iaitu perlu ditimpa oleh kelas terbitan. Dalam sesetengah pelaksanaan, vtable untuk kelas abstrak mungkin mengandungi penunjuk fungsi NULL untuk fungsi maya tulen. Ini memastikan bahawa memanggil fungsi maya tulen pada kelas abstrak menghasilkan tingkah laku yang tidak ditentukan.
Kesan Prestasi
Memiliki fungsi maya menambah overhed prestasi kerana keperluan untuk dinamik mengikat semasa runtime. Overhed ini hanya mempengaruhi pelaksanaan fungsi maya, bukan keseluruhan kelas. Mengatasi fungsi maya tidak mengubah kelajuan pelaksanaan. Walau bagaimanapun, mencipta vtable berasingan untuk kelas terbitan boleh menghasilkan ruang tambahan di atas kepala.
Atas ialah kandungan terperinci Bagaimanakah Fungsi Maya dan Vtables Mendayakan Polimorfisme dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!