Skoraj vse vrste objektno usmerjenega programiranja (OOP), ki ustvarja programe in ločuje dele kode na “predmete”, imajo funkcijo, imenovano čista virtualna funkcija, ki se razlikuje od virtualne funkcije. Čista navidezna funkcija, znana tudi kot abstraktna funkcija, deluje kot nadomestno mesto za druge spremenljivke in vzame informacije iz drugih funkcij in razredov, da zapolni praznine. Prednost uporabe čiste virtualne funkcije je, da so informacije prilagodljive in jih je mogoče spremeniti glede na vsakega uporabnika. Za delovanje mora obstajati izpeljan razred, iz katerega se pridobivajo podatki.
Virtualna funkcija je podobna čisti različici. Oboje se lahko spreminja glede na vnos uporabnika. Na primer, če uporabnik vnese svoje ime, se bo virtualna funkcija spremenila za celoten program, da bo ustrezala imenu tega uporabnika. Razlika je v tem, da virtualna funkcija ni odvisna od drugih razredov, ker ima navidezna funkcija svoje telo, ki podatke posreduje drugim razredom in funkcijam, ki kličejo informacije, v tem primeru uporabniško ime.
Nasprotno pa čista virtualna funkcija nima telesa. To pomeni, da je abstraktna funkcija sama po sebi neuporabna. Nima lastnih podatkov in če se abstraktni razred pokliče brez kakršnih koli informacij, lahko pride do napake. Čista navidezna funkcija mora imeti izpeljan razred ali razred, ki zbira podatke za abstraktno funkcijo, da deluje.
Izpeljani razred je lahko vprašanje ali področje, kjer uporabnik vnese nekakšen vnos, kot je besedilno polje. Podatki iz tega razreda se nato prenesejo v vse povezane čiste virtualne funkcije, ki usklajujejo odgovore. Razen če je abstraktna funkcija posebej poklicana, se ne bo aktivirala, razen če so podatki, ki so takoj posredovani.
Čiste virtualne funkcije imajo več prednosti. Uporaba abstraktne funkcije namesto ustvarjanja celotnega telesa kodiranja bistveno omejuje količino kode, ki jo mora programer ustvariti, zlasti za velike programe, ki nenehno uporabljajo iste informacije. Programer lahko prilagodi tudi abstraktno funkcijo, da spremeni način ravnanja programa s podatki, da postane učinkovitejši. Informacije temeljijo na izpeljanih razredih, zato bodo programi z vprašanji in zapletenim vnosom prilagodili podatke glede na vnos uporabnika, ne da bi program pomotoma poklical drug del nepomembne kode.