在设计的角度看,c++类中的成员函数与成员变量是绑定到一起的
从运行的角度看,c++类中的成员函数是处于代码区,而成员变量是属于数据段的
因此c++的虚函数表是属于对象,但是虚函数是属于类,虚函数表提供了一种动态将函数与对象关联起来,这是一种动态的机制
在对象创建之时,将虚函数的位置填充到虚函数表,也就是说是在类的对象new时,就已经将表填好了,在构造基类之后,虚函数表中会填充基类的函数指针,继续构造派生类时,又以派生类的函数来更新虚函数表
在对象销毁之时,也会重新填充虚函数表,也就是说,派生类析构之后,虚函数表中的函数指针会变成基类的函数指针
所谓对象的析构函数,它只是销毁和释放了对象的外加性的资源(例如:malloc的空间,虚函数表),对象本身并未释放,它的非外加性的资源还是可以存在的
非虚函数就不需要使用函数表的方式来实现了,直接根据对象所属的类来找类的方法来执行,
c++中类的方法名都有类名+函数名+参数来标示的
阅读(1110) | 评论(0) | 转发(0) |