为了账号安全,请及时绑定邮箱和手机立即绑定

为什么这里要使用初始化列表Watch(Time &t):m_tTime(t){},不能使用赋值运算Watch(Time &t){m_tTime = t;}?

class Watch

{

public:

Watch(Time &t){m_tTime = t;}

void display()

{

cout << m_tTime.m_iHour << endl;

cout << m_tTime.m_iMinute << endl;

cout << m_tTime.m_iSecond << endl;

}

public:

Time m_tTime;

};



正在回答

2 回答

因为Time类没有默认构造函数 初始化列表先于构造函数执行 所以这里只有用初始化列表  如果你要用赋值运算符的话 只有在Time类中设置默认构造函数

3 回复 有任何疑惑可以回复我~
#1

akane_14 提问者

谢谢!
2020-02-20 回复 有任何疑惑可以回复我~

因为编译器总是确保所有成员对象在构造函数体执行之前初始化,所以类类型的数据成员对象,在进入构造函数体之前就已经完成了构造。所以这里的m_tTime成员对象会在初始化列表(此处为空)执行完前进行实例化,所以会调用Time类的默认构造函数,而你Time类中又没有默认构造函数,所以报错。

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之模板篇
  • 参与学习       91156    人
  • 解答问题       318    个

本C++教程力求即学即会,所有知识以实践方式讲解到操作层面

进入课程

为什么这里要使用初始化列表Watch(Time &t):m_tTime(t){},不能使用赋值运算Watch(Time &t){m_tTime = t;}?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信