1625-5 王子昂 總結《2023年5月21日》 【連續第232天總結】
a.加密與解密虛函式
b.c++的物件導向模型的最核心概念是虛函式。
虛函式是在程式執行時定義的函式,虛函式的位址是不能再編譯時 確定的,只能在呼叫即將進行時確定
對所有虛函式的引用通常都放在乙個專用陣列,虛函式表,中,每個至少使用乙個虛函式的物件裡面都具有的虛函式表指標
虛函式通常通過指向虛函式表的指標間接加以引用
eg源**:
class csum
virtual int sub(int a, int b)
}; void main()
用vc++編譯後的彙編**為:
push esi
push 4
call 00401060;new(), 位新建物件例項分配4位元組
add esp,4
test eax,eax
je short 00401019
mov dword ptr [eax], 4050a0;將4050a0h寫入建立的物件例項之中。
4050a0h是csum類虛函式表的指標(vrbl),表中的元素是csum類的虛函式,它們指向csum函式的成員
mov esi,eax;esi=vtbl
jmp short 0040101b
xor esi,esi;用null指向物件例項指標,該分支在記憶體分配失敗才會來到,空指標將啟用seh
mov eax,dword ptr [esi];eax=*btbl=**add()
push 2
push 1
mov ecx,esi;bcx=this
call dword ptr [eax];對虛汗的呼叫,此時eax=*vtbl=**add(),即call 401040
mov edx,dword ptr [esi]
push 2
push 1
mov ecx,esi;ecx=this
call dword ptr [edx+4];call [vtbl+4]
pop esi
retn
這段**首先呼叫new函式分配類所需的記憶體,呼叫成功後eax儲存分配記憶體的指標,然後將物件例項指向csum類虛函式表(vtbl)4050a0h。
而此時在vtbl中有兩組資料:
[vtbl]=401040h;add()
[vtbl+4]=401050h;sub()
也就是說,虛函式的使用仍然是利用this指標找到物件位址,然後再根據vtbl找到所呼叫的虛函式的位址的
c.明日計畫
加密與解密控制語句
虛指標,虛函式,虛函式表,純虛函式
虛指標 虛繼承 在使用多重繼承時,如存在 class a 有m a變數 class a1 virtual public a,m a1 class a2 virtual public a m a2 class b public a1,public a2 m b 時 存在以下記憶體儲存順序 虛指標 指向...
虛函式 純虛函式
一 定義.純虛函式是在基類中宣告的虛函式,它在基類中沒有定義,但要求任何派生類都要定義自己的實現方法。在基類中實現純虛函式的方法是在函式原型後加 0 virtual void funtion1 0 二 引入原因 1 為了方便使用多型特性,我們常常需要在基類中定義虛函式。2 在很多情況下,基類本身生成...
虛函式 純虛函式
虛函式的作用是允許在派生類中重新定義與基類同名的函式,並且可以通過基類指標引用來訪問基類和派生類中的同名函式。include using namespace std class student student類成員函式的實現 宣告抽象基類shape class shape virtual float...