Skip to main content

Apa itu fungsi virtual?

Fungsi virtual adalah fungsi, yang didefinisikan dalam superclass, yang harus ada dalam subkelas agar subkelas tersebut memiliki definisi kelas yang lengkap.Fungsi virtual bergantung pada paradigma pemrograman yang berorientasi objek yang disebut warisan virtual, yang paling umum terlihat dalam C ++ menggunakan kata kunci virtual.Untuk mendefinisikan fungsi virtual, dua kelas diperlukan, superclass dan subclass.Superclass adalah tempat fungsi pertama kali dinyatakan, dan mungkin didefinisikan.Subkelas adalah tempat fungsi ditentukan mdash;atau ditimpa, tergantung pada apakah fungsi didefinisikan dalam superclass.

Fungsi virtual dapat didefinisikan dalam salah satu dari dua cara.Pertama, dapat didefinisikan sebagai rintisan, di mana ia memiliki tubuh kosong dan tidak melakukan apa pun.Kedua, dapat didefinisikan sebagai fungsi virtual murni, di mana ia didefinisikan sebagai nol dalam file header superclass.

Ada kelebihan dan kekurangan bagi kedua metodologi.Mendefinisikan fungsi sebagai rintisan memastikan bahwa semua subclass memiliki beberapa implementasi, bahkan jika itu tidak melakukan apa -apa.Jika seseorang lupa untuk mengesampingkan fungsi dan mengimplementasikannya dengan benar dalam subkelas, bagaimanapun, tidak ada kesalahan atau peringatan yang akan muncul untuk menunjukkan hal ini.Mendefinisikan fungsi virtual murni, di sisi lain, mengharuskan setiap subkelas untuk memiliki definisi fungsi sendiri, dan kesalahan akan muncul jika ini bukan masalahnya.Fungsi virtual, sehingga hierarki warisan dengan lebih dari dua tingkat mungkin tidak memerlukan definisi eksplisit fungsi virtual.Sebagai contoh, seseorang dapat mempertimbangkan kelas A yang menyatakan fungsi virtual, yang diimplementasikan dalam subkelas B. Kelas B memiliki subkelasnya sendiri, kelas C. Kelas C tidak memerlukan definisi eksplisit kelas sebagai fungsi, karena ia mewarisiDefinisi dari Kelas B. Jika perlu, Kelas C dapat mengganti fungsi kelas BS, atau dapat mengganti fungsi kelas BS sambil juga menyebutnya.

Di sisi lain, fungsi virtual tidak harus didefinisikan dalam subclass jika mereka dinyatakan virtual dalam subkelas itu.Sebagai contoh, orang dapat mempertimbangkan kelas A yang menyatakan fungsi virtual dan memiliki dua subclass, B dan C. Selain itu, orang dapat membayangkan bahwa Kelas B memiliki subkelas D dan E, dan Subclass C memiliki subkelas F dan G.

KelasB hingga G Semua harus memiliki kelas sebagai fungsi virtual yang didefinisikan entah bagaimana.Jika Kelas B memiliki implementasi fungsi AS, kelas D dan E tidak perlu diperbaiki.Mungkin subkelas CS perlu diterapkan sebagai fungsi, tetapi keduanya melakukan sesuatu yang berbeda, jadi mendefinisikan fungsi di Kelas C itu sendiri tidak akan berguna.Dalam hal ini, fungsi dapat dinyatakan virtual di Kelas C, dan implementasi tidak diperlukan.

Fungsi virtual dapat menakutkan untuk dipelajari, tetapi ketika digunakan dengan benar, mereka dapat mengurangi duplikasi kode dan membuat kode lebih mudah dipahami secara umum secara umum.Namun, ada banyak jebakan dengan fungsi virtual, terutama tentang warisan berganda.Dalam beberapa warisan, dimungkinkan untuk fungsi virtual yang didefinisikan secara ambigu untuk saling bertentangan, sehingga mereka harus digunakan dengan hati -hati dalam konteks itu.