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()。
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()。
相关文章推荐
- putchar和printf的区别,以及数组和指针的关系理解
- Start C++
- c++对象模型-the semantics of data
- opencv鼠标绘制直线 C++版
- pip install robotframework-sshlibrary提示: Microsoft Visual C++ 9.0 is required
- C/C++中extern关键字详解
- c++.primer.plus第五版第六章编程练习答案
- The kth great number(C++ stl multiset的应用)
- Amr and The Large Array
- C和C++混合编程(error C2059: syntax error : 'string')
- C++.Primer.Plus第五版第五章编程练习答案
- c语言有符号数和无符号类型计算
- C++ 文件操作
- C++链表冒泡,归并,插入排序(纯指针)
- C++指针(我所了解的)
- C/C++字符串函数之复制函数
- C++设计模式之桥接模式(Bridge)
- C++风格的强制性类型转换
- C++风格的强制性类型转换
- C++设计模式之组合模式(Composite)