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

我的C++ (四) - 类的继承和内存布局

2008-07-29 16:58 337 查看


<?XML:NAMESPACE PREFIX = O /> 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, 而且他还是第一父辈.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ email class 工作 qq