C 虛函式和C 虛函式的區別?

時間 2021-06-02 13:01:41

1樓:

c#不了解。

但是關於c++的說法,這樣是不對的。

題主你其實糾結的不是語言,而是an implementation of c++.

意思是,之所以會有上面的結果,是因為你的編譯器的實現。

在c++標準裡面,對於virtual 的具體實現沒有做任何要求。

而virtual method table只是大多數編譯器的實現。

因為標準沒有做要求,具體的細節上,每個編譯器是可以不同的。

而Virtual在標準裡面,設計者不是希望使用者去思考怎麼implement 它的,而是希望使用者對它的理解是這樣:

不考慮pure virtual .

base中宣告了乙個Virtual 函式,非pure virtual,所以這個函式必須要有定義。

從base class的reference或者pointer,你只能訪問到base的成員!!

但是,如果這個reference或者pointer,真實的型別是乙個子類的。

子類中,只要出現了相同函式(不包括返回值)的定義,那麼它override了自己的base的virtual function!!

所以,設計者,希望你認為的是,call的還是base class裡面的成員!

只是,這個成員被override了。

而不是希望你去考慮,這個背後的實現。

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

Elvis Wang 其實我覺得這個問題沒有回答的必要,屬於語言概念層面的東西。class A 首先你要搞清楚什麼是普通成員函式。成員函式是類例項相關的,不同的例項物件呼叫成員函式結果一般都不同。比如,上面的fun1是成員函式,你進行呼叫 A a1 new A A a2 new A a1 fun1 ...

為什麼 C 中使用虛函式時會影響效率?

C 中使用虛函式不會影響效率。你遇到的場景,都沒到需要考慮流水線 friendly 的程度,先把東西寫出來,別想沒用的。 maple 因為查詢虛函式表的時候會有效率損失,可以通過模板的CRTP技術實現靜態繫結,詳見 C CRTP Curiously Recurring Template Patter...

建構函式不能是虛函式

ylq 建構函式不是不能是虛函式,而是完全沒意義。c 在編譯期間就能確定你要建立的物件的具體型別,而這個具體型別包含了什麼,繼承了什麼在編譯期間也是明確的,所以要構造什麼也都是明確的,根本沒必要存在虛建構函式。虛函式的存在是因為編譯期間沒法確定具體呼叫物件,才會有虛函式,虛函式表這麼個東西。 雞賊軒...