c++靜態成員函式為什麼不能為虛擬函式?
class A {
int fun1() { ... }
static int func2() { ... }
}
首先你要搞清楚什麼是普通成員函式。成員函式是類例項相關的,不同的例項物件呼叫成員函式結果一般都不同。
比如,上面的fun1是成員函式,你進行呼叫:
A *a1 = new A;A *a2 = new A;
a1->fun1();
a2->fun1();
一般來說,a1和a2調研fun1的結果會不同。成員函式在不同的實現裡面設計不同,但大致都是在引數列表中隱式傳入一個this指標指代當前例項。
靜態函式,它其實就是普通函式。靜態函式跟類例項沒有關係,用a1和a2去呼叫結果一致,甚至於可以用A.fun2()的方式呼叫。靜態函式呼叫時不會隱式傳入this指標。
簡而言之,成員函式例項相關,靜態函式類相關。
虛擬函式,是一種特殊的成員函式,用來實現執行時多型的。
所以靜態函式不可能是虛擬函式。
至於虛擬函式有什麼特點,什麼是多型,請自行Bing之。