C 函式中不可被宣告為虛函式的函式

2021-07-16 19:43:30 字數 683 閱讀 5733



常見的不不能宣告為虛函式的有:普通函式(非成員函式);靜態成員函式;內聯成員函式;建構函式;友元函式。

1、為什麼c++不支援普通函式為虛函式?

普通函式(非成員函式)只能被overload,不能被override,宣告為虛函式也沒有什麼意思,因此編譯器會在編譯時邦定函式。

2、為什麼c++不支援建構函式為虛函式?

這個原因很簡單,主要是從語義上考慮,所以不支援。因為建構函式本來就是為了明確初始化物件成員才產生的,然而virtual function主要是為了再不完全了解細節的情況下也能正確處理物件。另外,virtual函式是在不同型別的物件產生不同的動作,現在物件還沒有產生,如何使用virtual函式來完成你想完成的動作。(這不就是典型的悖論)

3、為什麼c++不支援內聯成員函式為虛函式?

其實很簡單,那內聯函式就是為了在**中直接展開,減少函式呼叫花費的代價,虛函式是為了在繼承後物件能夠準確的執行自己的動作,這是不可能統一的。(再說了,inline函式在編譯時被展開,虛函式在執行時才能動態的邦定函式)

4、為什麼c++不支援靜態成員函式為虛函式?

這也很簡單,靜態成員函式對於每個類來說只有乙份**,所有的物件都共享這乙份**,他也沒有要動態邦定的必要性。

5、為什麼c++不支援友元函式為虛函式?

因為c++不支援友元函式的繼承,對於沒有繼承特性的函式沒有虛函式的說法。

C 函式中那些不可以被宣告為虛函式的函式

常見的不不能宣告為虛函式的有 普通函式 非成員函式 靜態成員函式 內聯成員函式 建構函式 友元函式。1 為什麼c 不支援普通函式為虛函式?普通函式 非成員函式 只能被overload,不能被override,宣告為虛函式也沒有什麼意思,因此編譯器會在編譯時邦定函式。2 為什麼c 不支援建構函式為虛函...

C 函式中那些不可以被宣告為虛函式的函式

1 頂層函式 普通函式 多型的執行期行為體現在虛函式上,虛函式通過繼承方式來體現出多型作用,頂層函式不屬於成員函式,是不能被繼承的。2 建構函式 1 建構函式不能被繼承,因而不能宣告為virtual函式。2 反證法 呼叫建構函式後才能生成乙個物件。假設建構函式是虛函式,那麼它存在於虛函式表中,那麼建...

C 中建構函式不能宣告為虛函式

建構函式不能宣告為虛函式,析構函式可以宣告為虛函式,而且有時是必須宣告為虛函式。不建議在建構函式和析構函式裡面呼叫虛函式。建構函式不能宣告為虛函式的原因是 1 構造乙個物件的時候,必須知道物件的實際型別,而虛函式行為是在執行期間確定實際型別的。而在構造乙個物件時,由於物件還未構造成功。編譯器無法知道...