●●深度探索C++对象模型●●对base class subobject(基类子对象)有些疑惑 在线==~~

little_duck 2005-08-29 11:02:47
我在看深度探索C++对象模型 的时候第3章有很多叙述了base class subobject词语 我理解为基类子对象 但我不明白什么是基类子对象 ,还有虚基类子对象。
基类子对象 和 虚基类子对象 有什么分别呢~~不明白~~ 还有就是派生虚基类的用处。
谢谢了大家~~
...全文
473 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
little_duck 2005-08-30
  • 打赏
  • 举报
回复
to zhouhuahai, junguo
我和你们两位理解的都差不多,但是基base class subobject(类子对象)是被继承下来的一个整体还是被继承下来的一个数据都可以叫base class subobject。
也就是B继承于A,B里有从A继承下来的东西。但是从A里会继承下来很多东西,我的意思是是继承下来这些东西的整个叫base class subobject呢还是继承下来每个数据成员都可以叫base class subobject,再次谢谢大家。
yhbttfile 2005-08-30
  • 打赏
  • 举报
回复
基类子对象是基于把基类的变量以及其VTP在继承类中理解成基类的一个整体。
继承对象是由基类的成员变量以及其VTP以及继承类本身的成员变量(包括VTP)组成。

也就是把继承类作为整体,基类是其中的部分(或者子部分)。
junguo 2005-08-30
  • 打赏
  • 举报
回复
继承类中包含本身和基类成员组成了对象,而属于某个基类的对象就是base class subobject!
virtual继承过来的基类对象,就是virtual base class subobject!
ningzhiyu 2005-08-30
  • 打赏
  • 举报
回复
xuexi
zhouhuahai 2005-08-30
  • 打赏
  • 举报
回复
何为基类子对象:
class A
{
public:
virtual int fun(int) {....};
};

class B: public A
{
public:
int fun1(int) {....};
private:
int b;
};
如果按inside the c++ object model里的说法.
类B的内存结构中会有vptr(继承自A)指向一个虚函数表.而类B的一个实例对象中继承自基类A的部分就是类B的基类子对象了.

至于虚基类子对象,则是和virtual继承有关.
moany 2005-08-30
  • 打赏
  • 举报
回复
理解错了吧?好象人家的意思是 在派生类中基类的那一块吧?subobject,对象中的一部分。
titima 2005-08-30
  • 打赏
  • 举报
回复
base class subobject 是派生自单一或多重继承串链
jixingzhong 2005-08-30
  • 打赏
  • 举报
回复
看了看,我也很糊涂 ~
中文书,偏偏要搞个 英文词汇 ......

不过理解了 base class subobject,前面的 VIRTUAL 也就很容易理解了...

同情 ....
little_duck 2005-08-30
  • 打赏
  • 举报
回复
谢谢上面解答 我最想知道的是base class subobject(基类子对象),什么是基类子对象?什么是虚基类子对象。谢谢了
husl 2005-08-30
  • 打赏
  • 举报
回复

A 掉了个构造函数 A(a){ x = a;}
husl 2005-08-30
  • 打赏
  • 举报
回复
如果使用虚基类 class B: virtual public A
{ }

可以解决问题 使用虚基类 使在多继承中 派生类中只有基类得一个拷贝
这就使虚基类和基类 的区别吧
其他的应该都差不多了
像 楼上说的 申请基类的 指针可以指向其子类的对象
Diraved d;
Base* b = &d;

husl 2005-08-30
  • 打赏
  • 举报
回复
class A
{
int x;
}
class B : public A
{
int y1;
B(int a=0; int b=0):A(a)
{
y1 = b;
}
}

class C : public A
{
int y2;
C(int a = 0; int b = 0;):A(a)
{
y2 = b;
}
}


class D:public B, public C //多继承
{
int z;
D(int a, int b, int w, int m):B(a, b), C(d, e)
{
z = m;
}

void print()
{
cout << " x = " << x <<endl; // 编译出错 B C 都重A继承 这时D中就有2个基类A得拷贝
// 无法确定 x 时从B 还是C中继承来得 产生二义性
}
mituzhishi 2005-08-29
  • 打赏
  • 举报
回复
没看过那本书,我的理解是父类类型引用了子类对象;

比如父类的指针指向了子类的对象。

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧