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

为什么当coordinate构造函数含有参数的时候,line只能用初始列表的方式

而不能,line::line(int x1,int y1,int x2,int y2)

{m_coorA.getx(x1);    m_coorAgety(y1);    m_coorB.getx(x2);    m_coorBgety(y2);

}

正在回答

5 回答

因为实例化Line时,必须先实例化m_coorA和m_coorB,但这两个对象又无默认构造函数,所以要用初始化列表。看到一个别的评论说的,不是原创,但觉得很简洁。

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

咦。修改了之后效果更奇怪了,c++真是一门奇特的语言..


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

不过这样写的话,对象之间会重名,但是为什么没有报错呢?

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

因为初始化列表会比构造函数先执行,再因为Coordinate是Line的对象成员,会优先于Line执行构造函数,所以如果不把Coordinate的那两个对象放在初始化列表中进行初始化,将会导致Coordinnate的对象使用默认构造函数进行初始化,然后你又没有写默认的构造函数,所以会报错,不过如果你写了默认构造函数,会导致多出来两个对象。好像很复杂的样子,你看得懂就看吧,看不懂算了,我语文学的不好

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

coordinate 构造函数含有参数且只能使用初始化列表的时候是需要初始化的变量带有const的时候。初始化const变量只能通过初始化列表的方式,不然会出错。 

我也是初学者,若有错误请指出。

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

举报

0/150
提交
取消
C++远征之封装篇(下)
  • 参与学习       70919    人
  • 解答问题       514    个

封装--面向对象三大特征之一,通过案例让C++所学知识融会贯通

进入课程

为什么当coordinate构造函数含有参数的时候,line只能用初始列表的方式

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