關於虛函式的面試題

2021-08-13 21:37:28 字數 1081 閱讀 4106

class a

private:

};class b

private:

};int main()

{a *pa = null;

pa->sayhello();

b *pb = null;

pb->sayhello();

system("pause");

return 0;

如上**,最近面試碰到題目。第乙個呼叫可以正常輸出,第二個卻是失敗的。

以下是是生成的彙編**:

_mainproc ; comdat

; 34   : {

pushebp

movebp, esp

subesp, 216; 000000d8h

pushebx

pushesi

pushedi

leaedi, dword ptr [ebp-216]

movecx, 54; 00000036h

moveax, -858993460; cccccccch

rep stosd

; 35   : a *pa = null;

movdword ptr _pa$[ebp], 0

; 36   : pa->sayhello();

movecx, dword ptr _pa$[ebp]

call?sayhello@a@@qaexxz; a::sayhello

; 37   : 

; 38   : b *pb = null;

movdword ptr _pb$[ebp], 0

; 39   : pb->sayhello();

moveax, dword ptr _pb$[ebp]

movedx, dword ptr [eax]

movesi, esp

movecx, dword ptr _pb$[ebp]

moveax, dword ptr [edx]

calleax

cmpesi, esp

call__rtc_checkesp

pb->sayhello(); 呼叫沒有找到相應的函式位址

虛函式面試題

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

面試題 虛函式和純虛函式

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