游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1184|回复: 0

转载: 我的Cpp (四) - 类的继承和内存布局

[复制链接]

4

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
QQ
发表于 2008-7-21 23:26:00 | 显示全部楼层 |阅读模式

toophy原创, email : toophy@126.com, 工作几年积累的一点经验, 拿来夯实一下


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, 而且他还是第一父辈.

2008.7.21 22:49 作者:toophy 引用:0 | 收藏 | 评论:0
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-21 22:33

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表