您的位置:首页 > 编程语言 > C语言/C++

c++对象模型-the sematics of function

2015-07-16 16:08 363 查看
1.多重继承下的虚函数

class Derived:public Base1,public Base2{. . .};

当有:Base2 *pbase2 = new Derived(); 新的Derived对象的地址必须调整,以指向其Base2 subobject(见上一篇:c++对象模型-the semantics of data),这一调整在编译可定。

当pbase2->fun();当fun 是一个虚函数且被Derived覆盖过,this指针需要再次调整,以求再一次指向Derived对象的起始处。这个调整在编译时不能直接设定,因为pbase2所指的真正对象执行时才能确定。解决方法时利用所谓的thunk。在Derived对象的base2 subobject 起始处也有一个虚函数表指针,指向的虚函数表继承于Base2的虚函数表。如果某个虚函数没有被覆盖,则沿用。否则,该指针指向一段thunk代码,在thunk代码中调整this指针,然后跳转到Derived::fun()。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: