Virtualus paveldėjimas yra paveldėjimo tipas, kai superklasės įgyvendinimas yra neišsamus, o poklasis reikalingas norint visiškai apibrėžti objektą. Šis paveldėjimo tipas gali būti naudojamas tiek su viengubu, tiek su daugybiniu paveldėjimu, tačiau dažniausiai naudojamas daugybinio paveldėjimo atveju. Bet kuri klasė, kuri paveldima iš virtualios bazinės klasės, tampa tiesioginiu tos bazinės klasės poklasiu. Virtuali bazinė klasė gali pasikliauti poklasiu, kad įgyvendintų visus savo metodus, tačiau tai nėra būtina.
C++ yra dažniausiai žinoma kompiuterių kalba, naudojanti virtualų paveldėjimą. Norint deklaruoti virtualų paveldėjimą C++, naudojamas raktinis žodis „virtualus“. Tiek superklasė, tiek poklasis turi deklaruoti virtualius metodus naudodami raktinį žodį „virtualus“. Tai praneša C++ kompiliatoriui, kad superklasė yra neužbaigta, ir ji turi gauti informaciją iš poklasio, kad ją užbaigtų. Poklasio naudojimas superklasei užbaigti nereiškia, kad poklasiai perrašo vienas kitą, jei turi tą pačią bazinę klasę, o vietoj to C++ kompiliatorius pasirūpina, kad nustatytų, kokios dalys yra su kiekvienu objektu.
Kadangi virtualiam paveldėjimui reikalinga virtuali bazinė klasė, pasaulinės funkcijos C++ negali būti paskelbtos virtualiomis. Šis paveldėjimo tipas gali būti naudojamas tik laikantis objektinio programavimo (OOP) principų. Taip yra dėl to, kad pasaulinės funkcijos nėra susietos su tam tikra klase, todėl dažniausiai yra savarankiškos. Be superklasės ir poklasio paveldėjimas negali įvykti, todėl globalios funkcijos ir virtualus paveldėjimas yra vienas kitą paneigiantys. Teoriškai visuotinės funkcijos gali būti naudojamos virtualiosiose funkcijose, tačiau ne visada gali veikti atvirkščiai.
Virtualus paveldėjimas naudojamas daugeliui programavimo problemų išspręsti, o vienas naudingiausių yra dviprasmybių sprendimas. Daugkartinio paveldėjimo atveju galima turėti pagrindinę A klasę, kuri turi du poklasius – B ir C, o vėliau – D klasę, kuri paveldi iš abiejų klasių B ir C. Šis modelis paprastai vadinamas „mirties deimantu“, nes jei A klasės, B ir C turi tą patį metodą, todėl D klasė negali nustatyti, kurį įgyvendinimą ji turėtų naudoti. Virtualus paveldėjimas išsprendžia šią problemą, nes kiekvienos klasės įgyvendinimas išlieka skirtingas ir todėl nedviprasmiškas. Šį skirtumą tvarko specializuoti vidiniai objektai, vadinami virtualiosiomis lentelėmis (vtables), kurios seka kiekvieną objektų tipą, tačiau programuotojas neturi aiškiai manipuliuoti šiomis lentelėmis, nes jos yra įtrauktos į kalbą.