国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++學習一虛函數的實現方式

2019-11-11 00:39:01
字體:
來源:轉載
供稿:網友

在基類的成員函數中如果有使用virtual關鍵字修飾的函數,實例化時就會產生一張對應這個類的對象的虛函數表,而這個函數本來應該是函數入口的,而現在變成了虛函數表的入口地址。然后通過虛函數表內找到函數的地址。

比如有這樣兩個類

class Base {public:	virtual int fun() {		return 0;	}};class BaseSon:public Base {};其中:

Base這個基類的fun函數是虛函數,實例化后,在這里存在的函數指針地址會被存到這個對象對應的一個虛函數表中,而這里的地址被換成了虛函數表地址。

Baseson繼承的Base的fun函數,但是也是存在一個虛函數表(這張表和上面那張不是同一張),同樣里面有Base的fun函數的函數地址(入口地址)。而且重點是,這個地址在這兩張表中的相對位置相同,也就是偏移量相同。

class Base {public:	virtual int fun() {		return 0;	}};class BaseSon:public Base {public:	virtual int fun(){		return 1;	}};在這種情況中,這里Base類和上面一致。但是BaseSon類的虛函數表內的那個地址被換成了BaseSon自己的那個return1的fun函數的入口地址。

所以,可以通過使用基類的指針來訪問派生類的fun函數,這樣就可以實現動態多態,同一個命令對不同對象使用時,實現不同的功能。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 玛沁县| 昭通市| 资溪县| 永寿县| 曲阳县| 恭城| 太仆寺旗| 临澧县| 东阳市| 荥阳市| 沾化县| 松江区| 加查县| 闽侯县| 平罗县| 曲阳县| 永德县| 曲靖市| 松江区| 桐梓县| 务川| 潞西市| 苗栗市| 赤城县| 泾川县| 民乐县| 白河县| 禹州市| 北京市| 泾源县| 岳西县| 屏山县| 古田县| 富蕴县| 连平县| 正镶白旗| 清水河县| 通河县| 安庆市| 体育| 和静县|