靜態成員函式為什麼不能是虛函式

2021-10-24 07:28:47 字數 395 閱讀 2639

首先什麼是static靜態成員函式?靜態成員函式不屬於類中的任何乙個物件和例項,屬於類共有的乙個函式。也就是說,它不能用this指標來訪問,因為this指標指向的是每乙個物件和例項。

對於virtual虛函式,它的呼叫恰恰使用this指標。在有虛函式的類例項中,this指標呼叫vptr指標,指向的是vtable(虛函式列表),通過虛函式列表找到需要呼叫的虛函式的位址。總體來說虛函式的呼叫關係是:this指標->vptr(4位元組)->vtable ->virtual虛函式。

所以說,static靜態函式沒有this指標,也就無法找到虛函式了。所以靜態成員函式不能是虛函式。他們的關鍵區別就是this指標。

建構函式不能為const函式,建構函式的目的就是為了給成員變數賦初值,不能為const函式

建構函式為什麼不能是虛函式

1.從儲存空間角度,虛函式對應乙個指向vtable虛函式表的指標,這大家都知道,可是這個指向vtable的指標其實是儲存在物件的記憶體空間的。問題出來了,如果建構函式是虛的,就需要通過 vtable來呼叫,可是物件還沒有例項化,也就是記憶體空間還沒有,怎麼找vtable呢?所以建構函式不能是虛函式。...

建構函式為什麼不能是虛函式

1.從 儲存空間角度,虛函式對應乙個指向vtable虛函式表的指標,這大家都知道,可是這個指向vtable的指標其實是儲存在物件的記憶體空間的。問題出來了,如果建構函式是虛的,就需要通過 vtable來呼叫,可是物件還沒有例項化,也就是記憶體空間還沒有,怎麼找vtable呢?所以建構函式不能是虛函式...

建構函式為什麼不能是虛函式

原文 1.從儲存空間角度,虛函式對應乙個指向vtable虛函式表的指標,這大家都知道,可是這個指向vtable的指標其實是儲存在物件的記憶體空間的。問題出來了,如果建構函式是虛的,就需要通過 vtable來呼叫,可是物件還沒有例項化,也就是記憶體空間還沒有,怎麼找vtable呢?所以建構函式不能是虛...