Peaaegu igat tüüpi objektorienteeritud programmeerimisel (OOP), mis loob programme ja eraldab koodilõigud “objektideks”, on funktsioon, mida nimetatakse puhtaks virtuaalseks funktsiooniks, mis erineb virtuaalsest funktsioonist. Puhas virtuaalne funktsioon, tuntud ka kui abstraktne funktsioon, toimib teiste muutujate kohahoidjana ja võtab lünkade täitmiseks teavet teistest funktsioonidest ja klassidest. Puhtalt virtuaalfunktsiooni kasutamise eeliseks on see, et info on tempermalmist ja seda saab muuta vastavalt igale kasutajale. Töötamiseks peab olema tuletatud klass, millest andmed hangitakse.
Virtuaalne funktsioon sarnaneb puhta variandiga. Mõlemad võivad muutuda sõltuvalt kasutaja sisendist. Näiteks kui kasutaja sisestab oma nime, muutub virtuaalne funktsioon kogu programmi jaoks, et kohandada selle kasutaja nime. Erinevus seisneb selles, et virtuaalne funktsioon ei sõltu teistest klassidest, kuna virtuaalsel funktsioonil on oma keha, mis edastab andmed teistele klassidele ja funktsioonidele, mis nõuavad teavet, antud näites kasutaja nime.
Seevastu puhtal virtuaalfunktsioonil puudub keha. See tähendab, et iseenesest on abstraktne funktsioon kasutu. Sellel pole oma andmeid ja kui abstraktset klassi kutsutakse ilma teabeta, võib see põhjustada tõrke. Puhtal virtuaalsel funktsioonil peab olema tuletatud klass või klass, mis kogub andmeid abstraktse funktsiooni toimimiseks.
Tuletatud klass võib olla küsimus või ala, kuhu kasutaja sisestab mingisuguse sisendi, näiteks tekstivälja. Sellest klassist saadud teave edastatakse seejärel kõikidele ühendatud puhastele virtuaalsetele funktsioonidele, koordineerides vastuseid. Kui abstraktset funktsiooni ei kutsuta spetsiaalselt välja, siis see ei aktiveeru, kui pole lihtsalt edastatud andmeid.
Puhtalt virtuaalsetel funktsioonidel on mitmeid eeliseid. Abstraktse funktsiooni kasutamine kogu kodeerimiskeha loomise asemel piirab oluliselt koodi hulka, mida programmeerija peab looma, eriti suurte programmide puhul, mis kasutavad pidevalt sama teavet. Abstraktset funktsiooni saab programmeerija ka kohandada, et muuta seda, kuidas programm andmeid töötleb, et muuta see tõhusamaks. Teave põhineb tuletatud klassidel, nii et küsimuste ja keeruka sisendiga programmid kohandavad andmeid vastavalt kasutaja sisendile, ilma et programm kutsuks kogemata välja mõne muu ebaolulise koodi osa.