Skip to main content

Apa itu warisan virtual?

Warisan virtual adalah jenis pewarisan di mana implementasi superclass tidak lengkap, dan subkelas diperlukan untuk definisi lengkap suatu objek.Jenis warisan ini dapat digunakan bersamaan dengan pewarisan tunggal dan berganda, tetapi paling umum digunakan dalam warisan berganda.Kelas apa pun yang mewarisi dari kelas dasar virtual menjadi subkelas langsung dari kelas dasar itu.Kelas dasar virtual dapat mengandalkan subkelas untuk mengimplementasikan semua metodenya, tetapi ini bukan persyaratan.

C ++ adalah bahasa komputer yang paling dikenal untuk menggunakan pewarisan virtual.Untuk mendeklarasikan warisan virtual dalam C ++, kata kunci virtual digunakan.Baik superclass dan subkelas harus mendeklarasikan metode virtual dengan kata kunci virtual.Ini memberi tahu kompiler C ++ bahwa superclass tidak lengkap, dan harus mendapatkan informasi dari subkelas untuk menyelesaikannya.Menggunakan subkelas untuk menyelesaikan superclass tidak berarti bahwa subkelas saling menimpa jika mereka memiliki kelas dasar yang sama, dan sebaliknya kompiler C ++ menangani menentukan potongan apa yang cocok dengan setiap objek.

Karena kelas dasar virtual diperlukan untuk virtualWarisan, fungsi global dalam C ++ tidak dapat dinyatakan virtual.Jenis warisan ini hanya dapat digunakan saat mematuhi prinsip pemrograman berorientasi objek (OOP).Alasan untuk ini adalah bahwa fungsi global tidak terkait dengan kelas tertentu, dan biasanya mandiri sendiri.Tanpa warisan superclass dan subclass tidak dapat terjadi, sehingga fungsi global dan pewarisan virtual saling eksklusif.Fungsi global dapat, secara teori, digunakan di dalam fungsi virtual, tetapi kebalikannya mungkin tidak selalu berhasil.

Warisan virtual digunakan untuk menyelesaikan banyak masalah pemrograman, dan salah satu yang paling berguna adalah resolusi ambiguitas.Dalam beberapa warisan, seseorang mungkin memiliki kelas dasar yang memiliki dua subclass, B dan C, dan kemudian kelas D yang mewarisi dari kedua kelas B dan C. Pola ini umumnya disebut berlian kematian karena jika kelas A, B,dan C semua memiliki implementasi dari metode yang sama, tidak mungkin bagi Kelas D untuk menentukan implementasi mana yang harus digunakan.Warisan virtual memecahkan masalah ini karena setiap implementasi kelas tetap berbeda, dan karenanya tidak ambigu.Perbedaan ini ditangani oleh objek internal khusus yang disebut tabel virtual (vtables) yang melacak masing -masing jenis objek, tetapi tabel ini tidak perlu secara eksplisit dimanipulasi oleh seorang programmer karena mereka dibangun ke dalam bahasa.