读书人

基类的信息保存在哪儿呢?解决方法

发布时间: 2012-02-04 15:43:09 作者: rapoo

基类的信息保存在哪儿呢?
看 深度探索c++对象模型

又有个问题不懂。在166页

说道: 当子类调用父类中的虚函数时,pder必须被向前调整sizeof(Base1) 个bytes

Derived *pder = new Derived;

pder-> mumble();//pder必须被向前调整sizeof(Base1) 个bytes

上面mumble()是基类Base1中定义的虚函数,Derived中没有改写。

调整的时候,怎么知道base1 的信息呢?

子类的信息可以在vtale中的第一个slot中表示,那么基类的又在哪儿呢?运行时如何知道?


[解决办法]
再继续看。估计你在前看后忘。
[解决办法]
首先,你说 "上面mumble()是基类Base1中定义的虚函数... ",这应该纠正,原书166页上的程序注释很清楚是 "//调用Base2::munble() "!如果是第一个Base1,那就不必修正sizeof(Base1)个btye了!

其次你所说的基类信息,确切的说应该是基类Base的首地址,关于这点书中已经说得很清楚,不同的编译器有细微差别的策略,其中列举了Sun、IBM以及Microsoft三种编译器的具体策略,就在167页。

读书人网 >C++

热点推荐