在C++中,vptr(虛函數(shù)指針)和純虛函數(shù)(Pure Virtual Function)是兩個不同的概念,但它們之間有一定的關(guān)聯(lián)。
虛函數(shù)指針(vptr): 虛函數(shù)指針是一個指向虛函數(shù)表(Virtual Table)的指針。當(dāng)一個類包含虛函數(shù)時,編譯器會為這個類創(chuàng)建一個虛函數(shù)表,其中存儲了虛函數(shù)的地址。然后,編譯器會在類的實例中添加一個指向虛函數(shù)表的指針(vptr)。當(dāng)調(diào)用虛函數(shù)時,程序會通過vptr找到虛函數(shù)表,再從虛函數(shù)表中找到相應(yīng)的函數(shù)地址進行調(diào)用。
純虛函數(shù)(Pure Virtual Function): 純虛函數(shù)是一種特殊的虛函數(shù),它沒有實現(xiàn),只有聲明。一個類如果包含純虛函數(shù),那么這個類就是抽象類,不能被實例化。純虛函數(shù)的主要作用是定義接口,讓派生類實現(xiàn)具體的功能。
vptr與純虛函數(shù)的關(guān)聯(lián): 當(dāng)一個類繼承自包含純虛函數(shù)的抽象類時,該類必須實現(xiàn)這些純虛函數(shù),否則它也將成為一個抽象類。在這個過程中,派生類的虛函數(shù)表會包含基類的純虛函數(shù)的實現(xiàn),這樣通過vptr調(diào)用這些函數(shù)時,就可以找到正確的函數(shù)地址。因此,vptr和純虛函數(shù)之間有一定的關(guān)聯(lián),但它們分別處理不同的概念:vptr處理虛函數(shù)的調(diào)用,而純虛函數(shù)定義接口和實現(xiàn)多態(tài)。