组合类的构造函数的调用顺序是怎样的

小班得瑞 2012-10-22 09:52:42
代码如下:

#include<iostream>
using namespace std;

class Part //部件类
{
public:
Part() {}
Part(int i) {cout<<"Part's construction called"<<endl;}

private:
int val;
};

class Whole
{
public:
Whole();
Whole(int i,int j,int k);

private:
//这三个变量的声明顺序改变,打印输出的结果仍然一样
Part one;
Part two;
int date;
};

Whole::Whole()
{
date=0;
}
Whole::Whole(int i,int j,int k):
one(j),date(k), two(i) //这里的初始化顺序改变,打印输出结果仍然一样
{ cout<<"Whole's construction called!"<<endl; }

int main(void)
{
Whole w(1, 2, 3);

return 1;
}

输出的是
Part's construction called
Part's construction called
Whole's construction called!
在注释的地方我更换顺序,结果都是一样的
我在书上看的原文如下:
“构造函数调用顺序:先调用内嵌对象的构造函数(按内嵌时的声明顺序,先声明者先构造)。然后调用本类的构造函数。(析构函数的调用顺序相反)”
我不明白,它所谓的按内嵌时的声明顺序,是什么意思
...全文
490 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
L麟凤龟龙W 2012-10-29
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;
class Part //部件类
{
public:
Part() {cout<<"Part default construction called"<<endl;}
Part(int i) {cout<<"Part: "<<i<<" construction called"<<endl;}
~Part() {cout<<"Part deconstruction called"<<endl;}
private:
int val;
};

class Whole
{
public:
Whole();
Whole(int i,int j,int k);
~Whole();
private:
//这三个变量的声明顺序改变,打印输出的结果仍然一样
Part one;
Part two;
int date;
};

Whole::Whole()
{ date=0;}
Whole::Whole(int i,int j,int k)
:one(j),date(k),two(i) //这里的初始化顺序按照one(2),date(3),two(1)进行
:/*one(j),*/date(k), two(i) //默认构造one
{ cout<<"Whole's construction called!"<<endl; }

Whole::~Whole()
{
cout<<"Whole deconstruction called!"<<endl;
}
int main(void)
{
Whole w(1, 2, 3);
return 1;
}
小班得瑞 2012-10-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

你怎么没打印个标识,不然你怎么知道先打印的是哪个Part‘s construction called?
[/Quote]
你说的标识是什么意思,请写下相关代码
petters 2012-10-23
  • 打赏
  • 举报
回复
你怎么没打印个标识,不然你怎么知道先打印的是哪个Part‘s construction called?

65,186

社区成员

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

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