Kelas virtual adalah kelas yang dialokasikan hanya sekali dalam memori, sehingga anak-anak dari kelas tersebut hanya menggunakan satu salinan dari kelas induk yang ditetapkan dalam memori. Kelas adalah sekelompok objek yang memiliki sifat atau atribut yang sama. Membuat kelas virtual memberi bahasa pemrograman berorientasi objek kemampuan menggunakan pewarisan berganda ketika kelas induk generasi kedua atau lebih diturunkan dari kelas dasar leluhur yang sama. Bergantung pada bahasa pemrograman komputer yang dirujuk, kata kunci “virtual”, kata kunci serupa, atau sintaksis dan semantik suatu kelas digunakan untuk menyiratkan bahwa kelas tertentu dianggap virtual.
Tidak semua bahasa pemrograman berorientasi objek memungkinkan pewarisan berganda, yaitu ketika kelas anak dapat diturunkan dari beberapa kelas induk secara bersamaan. Dalam bahasa pemrograman seperti C++, sebuah kelas dapat mewarisi semua data anggota dan fungsi anggota dari kedua kelas induk sekaligus dan memiliki akses ke kedua kumpulan data dan fungsi induk. Bahasa lain yang mendukung multiple inheritance termasuk Perl, Python, Tcl, dan Eiffel.
Masalah terjadi dalam hierarki pewarisan berganda ketika dua atau lebih kelas induk yang digunakan untuk membuat kelas turunan awalnya berasal dari hanya satu atau kelas kakek-nenek yang sama. Ini disebut masalah berlian, nama yang berasal dari bagaimana hierarki akan terlihat dalam situasi ini. Ketika program kompiler mencoba membuat instance kelas, seperti kelas cucu yang dibuat dari dua kelas induk dengan kakek-nenek yang sama, dua salinan kakek-nenek dibuat di memori, satu untuk setiap orangtua.
Karena ambiguitas yang disebabkan oleh banyak salinan dari kakek-nenek yang sama dalam memori, kompiler tidak dapat memastikan salinan kakek-nenek mana yang harus digunakan cucu untuk mengakses data atau fungsi kakek-nenek. Untuk memperbaiki situasi ini, di C++ kakek-nenek dibuat menjadi kelas virtual saat mendeklarasikan orang tua. Ini menyebabkan kompiler hanya membuat satu salinan kakek-nenek dalam memori yang dibagikan kedua orang tua. Setelah kakek-nenek menjadi kelas virtual, kompiler tidak memiliki masalah dalam memutuskan bagaimana cucu harus mengakses kakek-nenek karena hanya ada satu salinan kakek-nenek.
Perhatian besar harus diberikan ketika menyusun hierarki kelas, terutama ketika mereka akan dimasukkan atau menjadi dasar untuk hierarki yang jauh lebih besar di masa depan. Pemanfaatan kelas virtual yang tepat memberikan hierarki kelas keleluasaan yang lebih besar dalam pengembangan; namun, mereka berpotensi menyebabkan kesalahan yang sulit ditemukan. Studi tentang prinsip-prinsip teknik pemrograman komputer yang solid akan membantu memastikan bahwa efek samping yang tidak diharapkan dari organisasi program yang tidak tepat tidak terjadi.