子类对象在构造时先构造父类,那么构造的这个父类对象在哪里?叫什么名字?

llluyan 2008-02-08 06:00:35
子类对象在构造时先构造父类,那么构造的这个父类对象在哪里?叫什么名字?
...全文
177 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
0黄瓜0 2008-02-08
  • 打赏
  • 举报
回复
1
llluyan 2008-02-08
  • 打赏
  • 举报
回复
fish讲得太好了
lockhall 2008-02-08
  • 打赏
  • 举报
回复
和TTCN中的组建Component兼容一个道理。

就是A包含B全部,则A兼容了B。

fish6344 2008-02-08
  • 打赏
  • 举报
回复
C++标准对于对象(类的内存实例)及其中基类对象(subObject)的内存布局没有严格的规定,但通常(大多数)编译器都是在基类对象(subObject)之后建构布局出派生类对象.例如有如下类声明及其实例化代码:

class A
{
long _la;
char _ca;
public:
};

class B : public A
{
long _lb;
};

B _b;//B类实例化!

如前所述,编译器如你所说,先构造出A类的内存实例:_la、_ca以及对齐边界的3byte共同构成了B类的基类对象(subObject)计8byte!

对于B类,编译器有保证其基类原样性的承诺,因此,在上述已构成的基类对象8byte内存布局原样的情况下,再在其基类对象(subObject)的尾部构造出派生类的成员_lb,这样,构造成了共计12byte的B类实例_b!

另外在_b中,B类之成员和其基类对象(subObject)构成了一个完整的、新的B类实例,因此在此实例中不存在"其基类叫什么名字"的问题(可把B类看成是一个单独类,其中并无A类)!

arong1234 2008-02-08
  • 打赏
  • 举报
回复
父对象不会单独存在,它是子对象的一部分。不明白你问“名字”干嘛?名字对编译后的代码有什么意义?
Mnky 2008-02-08
  • 打赏
  • 举报
回复
#include "iostream"
using namespace std;

void main()
{
class A{
public:
int a;
void prt()
{
cout<<"A::a = "<<a<<endl;
};
};

class B : public A{
public:
int b;
};

B b;
b.A::a=1;
b.A::prt();
}
musicfans 2008-02-08
  • 打赏
  • 举报
回复
子类A,父类B
在子类的类定义里面会有父类的名字,如
class A:public B{
...
};
0黄瓜0 2008-02-08
  • 打赏
  • 举报
回复
一个类A要继承另一个类B,那么类A的对象中就有一部分完全与一个类B的对象相同.

64,654

社区成员

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

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