虛函式面試題

2021-06-18 19:07:20 字數 560 閱讀 2053

classa  

};  

classb  

};  

int_tmain(intargc, _tchar* argv)  

;  

情況a(不是虛函式):輸出hello world,程式執行正常;

情況b(有虛函式):程式直接crash;

原因是:不是虛函式的情況,this指標當成第乙個引數傳入函式(一般是通過ecx暫存器),主要裡面沒有使用這個this指標,函式執行是沒有問題,如果用到了this指標,譬如訪問了物件的成員變數,同樣會crash。

而虛函式的情況,就不一樣了,這種情況下,物件的第乙個成員是虛函式表指標(指向虛函式表,虛表指標的位置可能不不同的編譯器有差異,但原理一樣)。呼叫虛函式的時候,首先是通過物件位址(this指標)獲得第乙個成員(虛表指標)的值,然後再通過虛表指標+偏移獲得相應虛函式的位置,再呼叫虛函式,其實這是c++多型的原理,因此這個地方因為物件指標為null,因此去空位址取虛表指標,自然crash了。

虛函式有關面試題

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是虛函式,按理來說應該動態繫結,但是此時...

面試題 虛函式和純虛函式

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

C 面試題 多型,虛函式,純虛函式

多型 是對於不同物件接收相同訊息時產生不同的動作。c 的多型性具體體現在執行和編譯兩個方面 在程式執行時的多型性通過繼承和虛函式來體現 在程式編譯時多型性體現在函式和運算子的過載上 開課吧廣場c 面試 虛函式 在基類中冠以關鍵字 virtual 的成員函式。它提供了一種介面介面。允許在派生類中對基類...