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

時間 2021-06-01 03:56:54

1樓:Elvis Wang

其實我覺得這個問題沒有回答的必要,屬於語言概念層面的東西。

class A

首先你要搞清楚什麼是普通成員函式。成員函式是類例項相關的,不同的例項物件呼叫成員函式結果一般都不同。

比如,上面的fun1是成員函式,你進行呼叫:

A *a1 = new A;A *a2 = new A;

a1->fun1();

a2->fun1();

一般來說,a1和a2調研fun1的結果會不同。成員函式在不同的實現裡面設計不同,但大致都是在引數列表中隱式傳入乙個this指標指代當前例項。

靜態函式,它其實就是普通函式。靜態函式跟類例項沒有關係,用a1和a2去呼叫結果一致,甚至於可以用A.fun2()的方式呼叫。靜態函式呼叫時不會隱式傳入this指標。

簡而言之,成員函式例項相關,靜態函式類相關。

虛函式,是一種特殊的成員函式,用來實現執行時多型的。

所以靜態函式不可能是虛函式。

至於虛函式有什麼特點,什麼是多型,請自行Bing之。

為什麼C 中 void 能指向靜態成員函式但不能指非靜態向成員函式?

檀十一郎 讓我們來強行搞編譯器一波 class A fp A a A pa a pa fp.fpa fp.fp void 因為A test沒用到this,所以這麼搞也能工作。return 0 朱涵俊 靜態成員函式跟靜態函式沒區別,就是乙個作用域不同而已。可以看成普通的非成員函式。成員函式在傳引數時候...

為什麼不能在析構函式中呼叫虛函式?

CHAN.K 析構函式中呼叫虛函式不會呈現出多型!因為,當你呼叫某個繼承層次中的析構函式的時候,編譯系統會預設從該層開始,往後的派生類已經都被析構了,所以 也就不能出現多型的情況了.當然,這麼寫編譯器也不會報錯 唐沂 Effective C 條款9講建構函式中不要呼叫虛函式已經很清楚了,析構函式與其...

C 虛函式不能使用模板類有什麼替代方案

XZiar 說白了就是擦除了型別資訊,又想在執行時恢復出來。C 的問題在於,對於模板,每個例項都是不同的函式,且互相沒有聯絡。所以就需要在編譯期確定這個函式模板的例項。到目前為止目標應該就應該很清晰了,每乙個具體的son呼叫哪個foo 都需要一一對應。形成一一對應的方法很多,大致就是 1.if el...