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