关于类继承构造的问题

magicalking 2006-08-31 11:14:59
在定义一个子类对象时,总是先调用其基类的构造函数,然后调用子类的构造。那为什么在子类构造中却又可以向其基类构造传递参数?我的意思是,在调用基类构造时子类构造如果未被调用,那么基类构造函数的参数从哪来?
...全文
212 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
blue_zyb 2006-08-31
  • 打赏
  • 举报
回复
我认为,确切的说,这个构造顺序指的不是“看到的所谓严格的代码调用次序”,而对对象的构造顺序。也就是说,父类对象会先于子类对象构造出来。例如,下面的代码:
class A
{
public:
int a;
A(int arga)
{
a = arga;
}

};

class B : public A
{
public:
int b;
B (int arga, int argb) : b(argb), A(arga)
{

}
};

int main(int agrc,char *argv[])
{

B bbb(10, 123);
return 0;

}
虽然你单步跟踪可以看到main中定义一个B的对象时,跑到了B的构造函数,但F11下一步马上就会跳到A的构造函数,在B包含的子对象A构造好后再回到除A以外数据成员的构造。对于上面的代码,虽然成员初始化列表中的顺序是b(argb), A(arga),但你可以看到在A的构造函数结束后才会初始化b。
而且,从语法上来说,子对象A会在成员初始化列表(或者说B的constuctor 的{之前)被构造,你不能在constructor中写类似A(11)之类的代码,而如果你在成员初始化列表中没有提供构造函数的话,系统也会调用一个默认的A构造函数来把A先构造出来
晨星 2006-08-31
  • 打赏
  • 举报
回复
楼主想多了。
的确,在调用基类构造时,子类子对象还没有被构造出来。
但那也只能说明不能把子类的成员变量做为参数传给基类构造函数。
而并不能说明任何其它值或变量都不能传。最简单的:传个全局变量,常量,或外界传进来的参数等等总归没问题吗?
Dong 2006-08-31
  • 打赏
  • 举报
回复
那为什么在子类构造中却又可以向其基类构造传递参数?我的意思是,在调用基类构造时子类构造如果未被调用,那么基类构造函数的参数从哪来?
--------------------------------------------------------
这个操作在编译器在编译的时候由编译器插进代码完成

healer_kx 2006-08-31
  • 打赏
  • 举报
回复
看汇编,确实先是基类初始化,如何初始化,当然在派生类内给出参数。你不要认为这个是正常的调用就行了。

64,654

社区成员

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

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