Ugotovili smo, da se v razredih pri večkratnem dedovanju podatki podvajajo. Včasih je to potrebno, v večini primerov pa se želimo nepotrebnemu podvajanju podatkov izogniti. V ta namen lahko definiramo virtualne nadrazrede (virtual base classes).
Kot virtualni nadrazred definiramo tisti razred, za katerega predvidevamo, da se bo uporabljal kot nadrazred za večkratno dedovanje. V našem primeru definiramo kot virtualni nadrazred, razred oseba. Zato zapišemo izpeljavo razredov student, asistent in profesor na naslednji način:
class student :: public virtual oseba
Takšno izpeljavo imenujemo tudi virtualna izpeljava. Poglejmo grafično predstavitev objekta razreda student_asistent pri navadni in virtualni izpeljavi:
Slika 1: Virtualna izpeljava
Spremeniti pa je potrebno tudi konstruktor razreda student_asistent:
student_asistent :: student_asistent (char i, char n, char s, char v)
: oseba(i, n), student (i, n, s), asistent ("---", "+++" , v) {}