為什麼static函式不能為virtual

2022-03-25 17:38:25 字數 410 閱讀 2789

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

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

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

加深記憶:

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

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

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

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

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

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