Virtuaaliluokka on luokka, joka on varattu vain kerran muistiin siten, että kyseisen luokan lapset käyttävät vain sitä muistikortin kopiota. Luokka on joukko objekteja, joilla on yhteisiä piirteitä tai määritteitä. Luokan tekeminen virtuaaliseksi antaa olio-ohjelmointikielille mahdollisuuden käyttää useaa perintöä, kun toisen tai useamman sukupolven pääluokat johdetaan tavallisista esi-isien perusluokista. Viitatusta tietokoneohjelmointikielestä riippuen luokan “virtuaalinen” avainsana, vastaava avainsana tai syntaksi ja semantiikka viittaavat siihen, että tiettyä luokkaa on pidettävä virtuaalisena.
Kaikki olio-ohjelmointikielet eivät salli useaa perintöä, jolloin lapsiluokka voidaan johtaa useista pääluokista samanaikaisesti. Ohjelmointikielellä, kuten C ++, luokka voi periä kaikki jäsentiedot ja jäsenfunktiot molemmilta pääluokilta kerralla ja saada pääsyn molempiin vanhemmatieto- ja funktiosarjoihin. Muita kieliä, jotka tukevat useaa perintöä, ovat Perl, Python, Tcl ja Eiffel.
Ongelma esiintyy useissa perintöhierarkioissa, kun kaksi tai useampi lapsiluokan luomiseen käytetty vanhempainluokka on alun perin johdettu vain yhdestä tai samasta isovanhemman luokasta. Tätä kutsutaan timanttiongelmaksi, nimi johtuu siitä, miltä hierarkia näyttäisi tässä tilanteessa. Kun kääntäjäohjelma yrittää luoda luokan, kuten lapsenlapsiluokan, joka on tehty kahdesta vanhempainluokasta yhteisen isovanhemman kanssa, isovanhemmasta tehdään kaksi kopiota, yksi kullekin vanhemmalle.
Saman isovanhemman useiden kopioiden muistissa aiheuttaman epäselvyyden vuoksi kääntäjä ei voi selvittää, mitä isovanhemman kopiota lapsenlapsen tulisi käyttää isovanhemman tietojen tai toimintojen käyttämiseen. Tämän tilanteen korjaamiseksi isovanhemmasta tehdään C ++: ssa virtuaaliluokka, kun hän ilmoittaa vanhemmilleen. Tämä saa kääntäjän tekemään vain yhden kopion isovanhemmasta muistiin, jonka molemmat vanhemmat jakavat. Kun isovanhemmasta on tullut virtuaaliluokka, kääntäjällä ei ole vaikeuksia päättää, miten lapsenlapsen pitäisi päästä isovanhempaan, koska isovanhemmasta on vain yksi kopio.
Luokkahierarkioiden jäsentämisessä tulee olla erittäin varovainen, varsinkin kun ne sisällytetään tulevaisuudessa paljon suurempiin hierarkioihin tai niistä tulee perusta. Virtuaaliluokan asianmukainen käyttö antaa luokkahierarkioille enemmän liikkumavaraa kehityksessä; ne voivat kuitenkin aiheuttaa virheitä, joita on vaikea löytää. Vankien tietokoneohjelmointitekniikan periaatteiden tutkiminen auttaa varmistamaan, että virheellisestä ohjelmajärjestelystä ei aiheudu odottamattomia sivuvaikutuksia.