Neredeyse programlar oluşturan ve kod bölümlerini “nesnelere” ayıran tüm nesne yönelimli programlama (OOP) türlerinin, sanal bir işlevden farklı olan saf bir sanal işlev adı verilen bir işlevi vardır. Soyut bir işlev olarak da bilinen saf bir sanal işlev, diğer değişkenler için bir yer tutucu görevi görür ve boşlukları doldurmak için diğer işlevlerden ve sınıflardan bilgi alır. Saf bir sanal işlev kullanmanın avantajı, bilgilerin dövülebilir olması ve her bir kullanıcıya göre değiştirilebilmesidir. Çalışmak için, verilerin alındığı türetilmiş bir sınıf olmalıdır.
Sanal bir işlev saf değişkene benzer. Her ikisi de kullanıcının girişine bağlı olarak değişebilir. Örneğin, bir kullanıcı adını yazarsa, sanal işlev bu kullanıcının adını barındıracak tüm program için değişecektir. Aradaki fark, bir sanal fonksiyonun diğer sınıflara bağlı olmamasıdır, çünkü sanal fonksiyonun, verileri diğer sınıflara ve bilgiyi çağıran fonksiyonlara, bu örnekte kullanıcının ismine ileten kendi gövdesi vardır.
Saf bir sanal işlev, aksine, hiçbir vücuda sahip değildir. Bu, soyut fonksiyonun kendi başına işe yaramaz olduğu anlamına gelir. Kendi hiçbir veriye sahip değildir ve eğer soyut sınıf herhangi bir bilgi olmadan çağrılırsa, bir hatayla sonuçlanabilir. Saf sanal işlev, türetilmiş bir sınıfa veya soyut işlevin çalışması için veri toplayan bir sınıfa sahip olmalıdır.
Türetilmiş sınıf, bir soru veya kullanıcının bir metin alanı gibi bir tür giriş girdiği bir alan olabilir. Bu sınıftan gelen bilgiler daha sonra cevapları koordine eden tüm bağlı sanal fonksiyonlara aktarılır. Özet işlevi özel olarak adlandırılmadıkça, kolayca sağlanan veriler olmadığı sürece etkinleşmeyecektir.
Saf sanal fonksiyonların birçok avantajı vardır. Bütün bir kodlama gövdesi oluşturmak yerine soyut bir işlev kullanmak, özellikle aynı bilgileri sürekli kullanan büyük programlar için programcının yaratması gereken kod miktarını büyük ölçüde sınırlar. Soyut işlev, programcının verileri daha verimli hale getirme biçimini nasıl değiştirdiğini değiştirmek için programlayıcı tarafından değiştirilebilir. Bilgi türetilmiş sınıflara dayanmaktadır, bu nedenle sorular ve karmaşık girdi içeren programlar, yanlışlıkla bir alakasız kod bölümünü başka bir bölümü çağırmadan, verileri kullanıcının girişine göre uyarlar.


