国产探花免费观看_亚洲丰满少妇自慰呻吟_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函數,這樣就可以實現動態多態,同一個命令對不同對象使用時,實現不同的功能。


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

圖片精選

主站蜘蛛池模板: 江达县| 常熟市| 仁化县| 含山县| 江油市| 伊川县| 大关县| 平舆县| 达拉特旗| 巨鹿县| 全州县| 嘉定区| 盐津县| 建昌县| 内黄县| 宝兴县| 玛沁县| 通江县| 临邑县| 萍乡市| 天水市| 宜君县| 屯留县| 房山区| 阿克陶县| 乌兰县| 莒南县| 静乐县| 萨嘎县| 缙云县| 广安市| 海兴县| 泰安市| 焦作市| 黑河市| 尚志市| 太保市| 潜江市| 环江| 涟源市| 平谷区|