COM組件學習筆記--C++的虛函數表

COM接口是通過C++的Vtable建立起來的,Vtable是虛函數表(Virtual Function Table)的縮寫。在C++中的虛函數表提供了類實例功能的滯後綁定(Late Binding,也稱爲後綁定)。

一個COM接口實際就是一個指向Vtable結構的指針。

當你把一個函數聲明爲虛函數時,編譯器將在你的類結構里加上一個指針,該指針被稱爲虛指針,寫爲:vptr。vptr指向一個Vtable結構,該結構包含了類中所有虛函數的地址,也包含基類。

Class Fruit
{
Public:
   Void put_color( string str )
   {
       m_strColor = str;
   }

   String get_Color()
   {
       return m_strColor;
   }

   Virtual void Draw(){};
Private:
   String m_strColor;
}

Class Apple : public Fruit
{
Public:
   Void Draw()
   {
      Cout << "I'm an apple" << endl;  
   }
}

Class GrannySmith: public Apple
{
Public:
   Void Draw()
  {
     Cout << "I'm a Granny Smith Apple" << endl;
  }
}

這裏寫圖片描述

基類裏虛函數的使用是COM設計的核心。抽象類定義提供了一個僅僅包含有類的公共方法(接口)的Vtable。IMath類裏不包含數據成員,並且沒有實現函數。它的唯一目的是強制派生類(Math)以虛函數的方式實現組件接口的方法。
這裏寫圖片描述

一個COM接口只不過是一個指向一個具有C++風格的接口(或Vtable)的指針的指針(雙重指針)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章