C++ 虚函数表与内存模型
添加时间:2013-7-30 点击量:
1.虚函数
虚函数是c++实现多态的有力兵器,声明虚函数只需在函数前加上virtual关键字,虚函数的定义不消加virtual关键字。
2.虚函数要点
(1) 静态成员函数不克不及声明为虚函数
可以这么懂得,虚函数是个动态的概念,在运行的时辰才决意调用哪个,而静态函数是个静态的概念。加倍细化的申明是,静态函数与对象无关,不成以用对象实例调用,显然是与虚函数的概念违背的。
(2)机关函数不克不及是虚函数
很明显,虚函数表的建树都是在机关函数中进行的,若是机关函数是虚函数的话,就变成了鸡生蛋蛋生鸡的题目了。
(3)析构函数好是虚函数
析构函数好是虚函数,除非不想作为基类应用,声明称虚函数是个好习惯,如许用父类指针指向的子类对象就可以主动找到子类的析构函数了。
3.虚函数表在内存中的机关
在c++标准中请求,虚函数表必须在对象所占内存的开端的地位。
(1)无持续
无持续的话评论辩论虚函数无意义,然则须要申明的是此时虚函数遵守声明的次序摆放。
(2)一般持续,无虚函数覆盖
如许的话,虚函数表中先放父类虚函数指针,在按声明次序摆放本身的虚函数指针
(3)单持续,有虚函数覆盖
子类对象的虚函数表中被覆盖的项目组放置本身的虚函数指针,其他同(2)
(4)多重持续
多重持续意味着有多个虚函数表,本身独有的虚函数放置在第一个列表的尾部。
这篇总坚固际上是网上的一篇博文总结,该博文总结得很是好,所以我就摘录了过来。无论对感情还是对生活,“只要甜不要苦”都是任性而孩子气的,因为我们也不完美,我们也会伤害人。正因为我们都不完美,也因为生活从不是事事如意,所以对这些“瑕疵”的收纳才让我们对生活、对他人的爱变得日益真实而具体。—— 汪冰《世界再亏欠你,也要敢于拥抱幸福》
1.虚函数
虚函数是c++实现多态的有力兵器,声明虚函数只需在函数前加上virtual关键字,虚函数的定义不消加virtual关键字。
2.虚函数要点
(1) 静态成员函数不克不及声明为虚函数
可以这么懂得,虚函数是个动态的概念,在运行的时辰才决意调用哪个,而静态函数是个静态的概念。加倍细化的申明是,静态函数与对象无关,不成以用对象实例调用,显然是与虚函数的概念违背的。
(2)机关函数不克不及是虚函数
很明显,虚函数表的建树都是在机关函数中进行的,若是机关函数是虚函数的话,就变成了鸡生蛋蛋生鸡的题目了。
(3)析构函数好是虚函数
析构函数好是虚函数,除非不想作为基类应用,声明称虚函数是个好习惯,如许用父类指针指向的子类对象就可以主动找到子类的析构函数了。
3.虚函数表在内存中的机关
在c++标准中请求,虚函数表必须在对象所占内存的开端的地位。
(1)无持续
无持续的话评论辩论虚函数无意义,然则须要申明的是此时虚函数遵守声明的次序摆放。
(2)一般持续,无虚函数覆盖
如许的话,虚函数表中先放父类虚函数指针,在按声明次序摆放本身的虚函数指针
(3)单持续,有虚函数覆盖
子类对象的虚函数表中被覆盖的项目组放置本身的虚函数指针,其他同(2)
(4)多重持续
多重持续意味着有多个虚函数表,本身独有的虚函数放置在第一个列表的尾部。
这篇总坚固际上是网上的一篇博文总结,该博文总结得很是好,所以我就摘录了过来。无论对感情还是对生活,“只要甜不要苦”都是任性而孩子气的,因为我们也不完美,我们也会伤害人。正因为我们都不完美,也因为生活从不是事事如意,所以对这些“瑕疵”的收纳才让我们对生活、对他人的爱变得日益真实而具体。—— 汪冰《世界再亏欠你,也要敢于拥抱幸福》