基类的信息保存在哪儿呢?
看 深度探索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页。