Gotovo sve vrste objektno orijentiranog programiranja (OOP), koje stvara programe i odvaja dijelove koda u “objekte”, imaju funkciju koja se zove čista virtualna funkcija, a koja se razlikuje od virtualne funkcije. Također poznata kao apstraktna funkcija, čista virtualna funkcija djeluje kao rezervirano mjesto za druge varijable i uzima informacije iz drugih funkcija i klasa kako bi ispunila praznine. Prednost korištenja čiste virtualne funkcije je u tome što su informacije prilagodljive i mogu se mijenjati prema svakom korisniku. Da bi funkcionirao, mora postojati izvedena klasa iz koje se prikupljaju podaci.
Virtualna funkcija slična je čistoj varijanti. Oba se mogu mijenjati ovisno o unosu korisnika. Na primjer, ako korisnik upiše svoje ime, virtualna funkcija će se promijeniti za cijeli program kako bi se prilagodila imenu tog korisnika. Razlika je u tome što virtualna funkcija ne ovisi o drugim klasama, jer virtualna funkcija ima svoje tijelo koje prosljeđuje podatke drugim klasama i funkcijama koje pozivaju informacije, u ovom primjeru ime korisnika.
Nasuprot tome, čista virtualna funkcija nema tijelo. To znači da je, sama po sebi, apstraktna funkcija beskorisna. Nema vlastitih podataka i, ako se apstraktna klasa pozove bez ikakvih informacija, to bi moglo rezultirati pogreškom. Čista virtualna funkcija mora imati izvedenu klasu, ili klasu koja prikuplja podatke za apstraktnu funkciju, da bi radila.
Izvedena klasa može biti pitanje ili područje u koje korisnik unosi neku vrstu unosa, kao što je tekstualno polje. Informacije iz ove klase zatim se prenose na sve povezane čiste virtualne funkcije, koordinirajući odgovore. Osim ako se apstraktna funkcija posebno ne pozove, neće se aktivirati osim ako nema podataka koji se lako isporučuju.
Čiste virtualne funkcije imaju nekoliko prednosti. Korištenje apstraktne funkcije umjesto stvaranja cijelog tijela kodiranja značajno ograničava količinu koda koji programer treba stvoriti, posebno za velike programe koji kontinuirano koriste iste informacije. Programer također može podesiti apstraktnu funkciju kako bi promijenio način na koji program rukuje podacima kako bi bio učinkovitiji. Informacije se temelje na izvedenim klasama, tako da će programi s pitanjima i složenim unosom prilagoditi podatke prema unosu korisnika, a da program slučajno ne pozove drugi dio nerelevantnog koda.