c++安全之虛表

        多態,這玩意就是一泛型技術,即就是通過不變的接口實現可變的算法。一般常見的
設計模式都用到這哥們,學c++懂這是必須的。這東西牽扯到虛函數+虛表,這兩樣東西的
概念百度上可以Google下。
        虛表就是一個齷齪的體無完膚的東東。大家都知道類的private以及protected成員不能外界訪問的,
哈哈……虛表讓“一切皆有可能”!代碼如下:
    class A
{
private:
 virtual void fa()
 {
        cout<<"A::fa()"<<endl;
 }
};
class B:public A
{
private:
 virtual void fb()
 {
  cout<<"B:fb()"<<endl;
 }
};
int main(int argc, char* argv[])
{
 A *p = new B;
    typedef (*Fn)();//函數指針
 Fn f = (Fn)(*((int*)(*(int*)p)));//(int*)p虛表地址(int*)*(int*)p虛表中第一個函數地址
//Fn f = (Fn)(*((int*)(*(int*)p)+1));//fb
 
 f();
 return 0;
}
子類沒有重載父類的虛函數是一件毫無意義的事情,回頭看上邊代碼:p->fb()是編
譯不過去的,但通過虛表就OK了。有意思 哈哈。。。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章