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

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

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

2019-11-11 01:24:48
字體:
來源:轉載
供稿:網友

在基類的成員函數中如果有使用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函數,這樣就可以實現動態多態,同一個命令對不同對象使用時,實現不同的功能。


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

圖片精選

主站蜘蛛池模板: 益阳市| 灵寿县| 兴文县| 兴安盟| 玛多县| 九龙城区| 渝北区| 桃园县| 嘉鱼县| 博乐市| 西平县| 峨眉山市| 奇台县| 泽普县| 来安县| 龙南县| 木兰县| 通道| 新密市| 定远县| 漯河市| 锦州市| 蓝山县| 五原县| 淮滨县| 红桥区| 保亭| 格尔木市| 孝昌县| 邵武市| 甘德县| 渝北区| 大埔区| 百色市| 阳朔县| 泉州市| 观塘区| 郓城县| 容城县| 于都县| 襄垣县|