虛函式的注意事項

2021-09-08 01:58:55 字數 824 閱讀 4951

虛函式是為了實現多型特性的。虛函式的呼叫只有在程式執行的時候才能知道到底呼叫的是哪個函式,

虛函式的作用在於通過父類的指標或者引用來呼叫它的時候能夠變成呼叫子類的那個成員函式。

當乙個類被用來作為基類的時候,才把析構函式寫成虛函式.

因為如果這個類被其他類繼承但並沒有把析構函式寫成虛函式,若定義乙個父類的指標指向子類,當釋放這個指標時的過程是:只是釋放了父類的資源,而沒有呼叫繼承類的析構函式,造成記憶體洩漏.。

如果不需要父類對繼承類及物件進行操作,則不能定義虛函式,因為這樣會增加記憶體開銷.當類裡面有定義虛函式的時候,編譯器會給類新增乙個虛函式表,裡面來存放虛函式指標,這樣就會增加類的儲存空間。

建構函式是在建立物件時自動呼叫的,不可能通過父類的指標或者引用去呼叫,因此也就規定建構函式不能是虛函式。

虛函式對應乙個虛函式表,這個虛函式表是儲存在物件的記憶體空間的。如果建構函式是虛的,就需要通過 虛函式表來呼叫,但物件還沒有例項化,也就是記憶體空間還沒有,更不要說在虛函式表中呼叫了,所以建構函式不能是虛函式。

inline是在編譯期將函式類容替換到函式呼叫處,是靜態編譯的。而虛函式是動態呼叫的,在編譯期並不知道需要呼叫的是父類還是子類的虛函式,所以不能夠inline宣告展開,所以編譯器會忽略。

主要涉及靜態函式和虛函式的編譯時機的不同。static函式在編譯時候就繫結成功,而虛函式則要在執行時才能確定下來。虛函式,是一種特殊的成員函式,用來實現執行時多型。virtual函式一定要通過物件來呼叫,有隱藏的this指標。static函式沒有this指標,屬於類而不屬於具體物件,因此static函式無法通過物件來呼叫。因此二者是不能同時成立的。

c 虛函式注意事項

在基類方法宣告中使用關鍵字virtual,可以使該方法在基類及所有的派生類中是虛的 如果使用指向物件的引用或指標來呼叫虛方法,程式將使用物件型別定義的方法,而不使用為引用或指標型別定義的方法 這稱為動態聯編或晚期聯編,這種行為非常重要,因為這樣基類指標或引用可以指向派生類物件 如果定義的類將被用作基...

C 中虛函式的使用注意事項

1.基類中定義的虛函式,在派生類中override時,不能改變其可訪問性 public private protected 2.class base public virtual void fun class derived base public virtual void fun 如上,派生類隱藏...

函式的注意事項

1 函式的形參列表可以是多個,返回值列表也可以是多個。2 形參列表和返回值列表的資料型別可以是值型別和引用型別 3 函式的命名遵循識別符號命名規範,首字母不能是數字,首字母大寫該函式可以被本報檔案和其它包檔案使用,類似public,首字母小寫,只能被本包使用,其它包檔案不能使用,類似private ...