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


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

圖片精選

主站蜘蛛池模板: 南漳县| 克拉玛依市| 海原县| 林周县| 呼伦贝尔市| 华安县| 湘潭市| 肇庆市| 蓬莱市| 乌拉特后旗| 尖扎县| 京山县| 额敏县| 平乡县| 集安市| 新化县| 万安县| 德江县| 台东市| 乌兰察布市| 长葛市| 彰化市| 清河县| 科技| 汪清县| 阿鲁科尔沁旗| 彭泽县| 临洮县| 武功县| 黄石市| 滨海县| 韶关市| 绥化市| 称多县| 高阳县| 石家庄市| 扬中市| 高尔夫| 安岳县| 汶川县| 溧水县|