C 這些函式不能宣告為虛函式的原因

2021-09-17 04:31:58 字數 691 閱讀 1040

1. 不能宣告為虛函式的函式

普通函式(非成員函式):我在前面多型這篇部落格裡講到,定義虛函式的主要目的是為了重寫達到多型,所以普通函式宣告為虛函式沒有意義,因此編譯器在編譯時就繫結了它。

靜態成員函式:靜態成員函式對於每個類都只有乙份**,所有物件都可以共享這份**,他不歸某乙個物件所有,所以它也沒有動態繫結的必要。

內聯成員函式:內聯函式本就是為了減少函式呼叫的代價,所以在**中直接展開。但虛函式一定要建立虛函式表,這兩者不可能統一。另外,內聯函式在編譯時被展開,而虛函式在執行時才動態繫結。

建構函式:這個原因很簡單,主要從語義上考慮。因為建構函式本來是為了初始化物件成員才產生的,然而虛函式的目的是為了在完全不了解細節的情況下也能正確處理物件,兩者根本不能「 好好相處 」。因為虛函式要對不同型別的物件產生不同的動作,如果將建構函式定義成虛函式,那麼物件都沒有產生,怎麼完成想要的動作??

友元函式:當我們把乙個函式宣告為乙個類的友元函式時,它只是乙個可以訪問類內成員的普通函式,並不是這個類的成員函式,自然也不能在自己的類內將它宣告為虛函式。

注意:友元本身可以是虛函式!!

如果乙個類的友元函式是另乙個類成員函式,那麼它在自己的類內可以被宣告為虛函式。

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

建構函式不能宣告為虛函式的原因 1.所謂虛函式就是多型情況下只執行乙個,而從繼承的概念來講,總是先構造父類物件,然後才能使子類物件,如果建構函式設為虛函式,那麼你在構造父類的建構函式時就不得不顯式的呼叫構造,還有乙個原因就是為了防錯誤的發生,試想如果你在子類中一不小心重寫了個跟父類建構函式一樣的函式...

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

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

哪些函式不能被宣告為虛函式

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