驗證virtual函式的原理
#include <iostream>
using namespace std;
class Base{
public:
virtual void f() { cout << "the first virtual function f" << endl; }
virtual void g() { cout << "the second virtual function g" << endl; }
virtual void h() { cout << "the third virtual function h" << endl; }
using namespace std;
class Base{
public:
virtual void f() { cout << "the first virtual function f" << endl; }
virtual void g() { cout << "the second virtual function g" << endl; }
virtual void h() { cout << "the third virtual function h" << endl; }
};
#include "Base.h"
#include <iostream>
using namespace std;
typedef void(*Fun)(void);//Fun在這裡被定義為一種型別,這個型別可以描述為:指向引數為void,返回值也是void的函式的一個指標
int main(){
Base b;
Fun pFun = NULL;
cout<<"vtable address:"<<(int*)(&b)<<endl;//這裡說的vtable是一個指標,即指向陣列的指標 int**
cout<<"first virtual function address is"<<(int*)*(int*)(&b)<<endl;
// Invoke the first virtual function
int* vtable = (int*)*(int*)(&b);//int* 標誌著vtable陣列的開始
pFun = (Fun)*(vtable);
pFun();
cout<<"second virtual function address is"<<(vtable+1)<<endl;
pFun = (Fun)*(vtable+1);
pFun();
cout<<"third virtual function address is"<<(vtable+2)<<endl;
pFun = (Fun)*(vtable+2);
pFun();
}
這裡的驗證方法是,如果地址不是虛擬函式的地址,那麼用函式指標呼叫的時候,程式會崩潰,如果沒有崩潰得到正確的結果那說明你的運算時正確的。
相關文章
- C++ Virtual函式C++函式
- ORACLE 密碼驗證函式Oracle密碼函式
- JS函式驗證總結JS函式
- php 驗證格式的函式總結PHP函式
- mssql sqlserver 驗證整型函式分享SQLServer函式
- 自定義密碼驗證函式密碼函式
- 通用表單驗證函式-FormCheckJavaScriptFunction函式ORMJavaScriptFunction
- 驗證碼原理及驗證
- C++中的虛擬函式(virtual function)C++函式Function
- [CareerCup] 13.3 Virtual Functions 虛擬函式Function函式
- 內聯(inline)函式與虛擬函式(virtual)的討論inline函式
- [CareerCup] 13.6 Virtual Destructor 虛解構函式Struct函式
- 驗證證書的正規表示式
- async 函式的實現原理函式
- 虛擬函式的呼叫原理函式
- bind 函式的實現原理函式
- 【C++基礎】純虛擬函式 - pure virtual functionC++函式Function
- 驗證碼的原理、作用及實現
- HACCP原理——驗證程式(轉載)
- 分享一個非常全的php正則驗證車牌格式的函式PHP函式
- 虛擬函式的實現原理函式
- JS正規表示式的驗證JS
- Redux中利用函式式元件替代onEnter進行登入狀態驗證的實踐Redux函式元件
- 模板函式編譯原理函式編譯原理
- 開發中遇到的jquery函式應用和表單驗證處理jQuery函式
- 【函式】Oracle的常用字元函式實驗展示(一)函式Oracle字元
- 【函式】Oracle的常用字元函式實驗展示(二)函式Oracle字元
- 函式節流、函式防抖實現原理分析函式
- Virtual Dom && Diff原理,極簡版
- 如何驗證一個地址可否使用—— MmIsAddressValid函式分析函式
- C++繼承三之純虛擬函式pure virtual functionC++繼承函式Function
- 表單驗證的3個函式ISSET()、empty()、is_numeric()的使用方法函式
- javascript常用的驗證正規表示式JavaScript
- js正規表示式驗證URL函式程式碼(方便多個正則對比)JS函式
- [DHCP服務]——一個驗證DHCP原理實驗(VMware)
- php底層原理之函式PHP函式
- js立即執行函式原理JS函式
- 交叉驗證(Cross Validation)原理小結ROS