toophy原创, email : toophy@126.com, QQ : 1033683566,工作几年积累的一点经验, 拿来夯实一下 :)
class CA
{
int a;
};
class CB
{
int b;
};
class CL : public CB, public CA
{
int c;
};
以上的类继承, 对CL类说, 他的内存布局是
int b;
int a;
int c;
像我们想的一样, CB是第一个父辈, CA是第二个, CL里面的数据就放在最后.
但是, 改造CA如下:
class CA
{
int a;
virtual void seta( int _a ) { a = _a; }
};
同样继承顺序的CL, 内存中布局是
virtable
int a;
int b;
int c;
CA被提到CB前面, 这样的布局是因为 class 的布局就是 virtualtable 肯定要放在
最前面.
再次改造, 这回是CB, 改造CB如下:
class CB
{
int b;
virtual void setb( int _b ) { b=_b; }
};
同样继承顺序的CL, 内存布局是
virtable ( CB )
int b;
virtalbe ( CA )
int a;
int c;
我们看到 CA 又被压制下来, 因为CB 也有自己的 virtualtable, 而且他还是第一父辈.