Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Fungsi Maya dan Vtables Mendayakan Polimorfisme dalam C?

Bagaimanakah Fungsi Maya dan Vtables Mendayakan Polimorfisme dalam C?

DDD
Lepaskan: 2024-12-12 13:00:19
asal
701 orang telah melayarinya

How Do Virtual Functions and Vtables Enable Polymorphism in C  ?

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan