Aproape toate tipurile de programare orientată pe obiecte (OOP), care creează programe și separă secțiunile de cod în „obiecte”, au o funcție numită funcție virtuală pură, care este diferită de o funcție virtuală. Cunoscută și ca funcție abstractă, o funcție virtuală pură acționează ca un substituent pentru alte variabile și preia informații de la alte funcții și clase pentru a completa spațiile libere. Avantajul utilizării unei funcții virtuale pur este că informația este maleabilă și poate fi modificată în funcție de fiecare utilizator. Pentru a funcționa, trebuie să existe o clasă derivată de la care sunt achiziționate datele.
O funcție virtuală este similară cu varianta pură. Ambele se pot schimba în funcție de intrarea utilizatorului. De exemplu, dacă un utilizator introduce numele lui sau ei, funcția virtuală se va schimba pentru întregul program pentru a găzdui numele utilizatorului respectiv. Diferența este că o funcție virtuală nu este dependentă de alte clase, deoarece funcția virtuală are propriul său corp care transmite datele altor clase și funcții care solicită informații, în acest exemplu numele utilizatorului.
O funcție virtuală pură, dimpotrivă, nu are niciun corp. Aceasta înseamnă că, prin ea însăși, funcția abstractă este inutilă. Nu are date proprii și, dacă clasa abstractă este apelată fără nicio informație, ar putea duce la o eroare. Funcția virtuală pură trebuie să aibă o clasă derivată sau o clasă care adună date pentru funcția abstractă, pentru a funcționa.
Clasa derivată poate fi o întrebare sau o zonă în care un utilizator introduce un fel de intrare, cum ar fi un câmp de text. Informațiile din această clasă sunt apoi transferate către toate funcțiile virtuale pure conectate, coordonând răspunsurile. Cu excepția cazului în care funcția abstractă este apelată în mod specific, aceasta nu se va activa decât dacă există date ușor furnizate.
Funcțiile virtuale pure au mai multe avantaje. Folosirea unei funcții abstracte în loc de a crea un întreg corp de codare limitează substanțial cantitatea de cod pe care programatorul trebuie să o creeze, în special pentru programele mari care folosesc aceleași informații continuu. Funcția abstractă poate fi, de asemenea, ajustată de programator pentru a schimba modul în care programul gestionează datele pentru a le face mai eficiente. Informațiile se bazează pe clase derivate, astfel încât programele cu întrebări și intrări complexe vor adapta datele în funcție de intrarea utilizatorului, fără ca programul să apeleze accidental o altă secțiune de cod irelevant.