面試題目 虛函式和非虛函式的呼叫

2021-06-07 05:42:07 字數 1310 閱讀 8283

本部落格(

)貼出作者(三二

一、小魚)相關研究、學習內容所做的筆記,歡迎廣大朋友指正!

寫出如下程式的執行結果:

"iostream.h

"class

cbase

void

act2()        

virtual

void

act3()    

virtual

void

act4()    

void

act5()        

;class

cderive :

public

cbase

void

act4()    

//此處的act5()呼叫cderive類的act5

void

act5()    

;void

main(

void

)執行結果如下:

cbase::act1()!

cbase::act2()!

cbase::act3()!

cbase::act4()!

cbase::act5()!

cbase::act5()!

cbase::act1()!

cbase::act2()!

cderive::act3()!

cderive::act4()!

cderive::act5()!

cbase::act5()!

在物件導向的概念中,多型性是指不同物件收到相同訊息時,根據物件類不同產生不同的動作。多型性提供了把介面與實現分開的另一種方法,提高了**的組織性和可讀性,使軟體的可擴充性有充分的提高。

虛函式與過載設計方法上有何相同和區別:

(1)過載函式依賴靜態聯編,根據函式引數數目和種類的不同呼叫不同的函式體;虛函式依賴動態聯編,根據類物件指標型別確定正確的類版本呼叫;

(2)過載函式之間和虛函式之間的返回型別必須是一樣的;

(3)建構函式可以為過載函式,不能為虛函式;析構函式應該為虛函式;

(4)過載函式出現在乙個類定義體中;虛函式出現在不同版本的派生類中。

虛析構函式設計對執行時的多型性處理的作用:

析構函式應該是虛函式。與一般的成員函式一樣,析構函式被呼叫時,物件的構造已經完成,vptr和vtable也已被正確初始化,因此虛析構函式在實現上是可能的。

從設計任務來看,析構函式的任務是釋放記憶體,因此它必須知道被釋放的物件的型別,否則可能破壞有用的資料,產生不可預知的後果。如用基類的指標指向了派生類物件,那麼釋放記憶體時,必須是釋放派生類物件的儲存空間。

面試題 虛函式和純虛函式

虛函式 c 中的虛函式的作用主要是實現了多型的機制。關於多型,簡而言之就是用父型別的指標指向其子類的例項,然後通過父類的指標呼叫實際子類的成員函式。這種技術可以讓父類的指標有 多種形態 這是一種泛型技術。如果呼叫非虛函式,則無論實際物件是什麼型別,都執行基類型別所定義的函式。非虛函式總是在編譯時根據...

虛函式面試題

classa classb int tmain intargc,tchar argv 情況a 不是虛函式 輸出hello world,程式執行正常 情況b 有虛函式 程式直接crash 原因是 不是虛函式的情況,this指標當成第乙個引數傳入函式 一般是通過ecx暫存器 主要裡面沒有使用這個this...

虛函式有關面試題

class a virtual void p virtual a class b public a void p b int main int,char 這段程式的輸出 abba 題目想構造乙個b類的物件,b繼承自a,所示首先構造a,a中構造函式呼叫p,雖然p是虛函式,按理來說應該動態繫結,但是此時...