C++中的虛函數

1.虛函數的實現原理(http://www.cnblogs.com/malecrab/p/5572730.html)

如果一個類含有虛函數,那麼編譯器會爲該類生成一個與之對應的虛函數表,其中存放着該類所有的虛函數對應的虛函數指針。虛函數表每一行對應一個虛函數的地址。

那麼類的對象是如何找到虛函數表的呢?

對於含有虛函數的類,構造該類的對象時,會自動的爲其添加一個虛函數表指針vptr,vptr指向類的虛函數表。

 

虛函數的調用

 

void test(B *pb) {
   pb->bar();
}


pb可能指向B的對象,也可能指向其派生類的對象,但是不論B還是D,其中的bar()在對應的虛函數表中偏移是一樣,如果pb指向B,那麼就會調用B.bar(),如果pb指向D,那麼就會調用D.bar(),實現多態。

 

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