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

c++对象成员问题:为什么在Line.h中实例化不需要传入参数

c++对象成员问题:为什么在Line.h中实例化不需要传入参数

C++
韦德之道Chen 2019-08-31 10:29:27
想问下,在Line.h中,Coordinate m_coorA;Coordinate m_coorB;这两行代码是类的成员变量,同时也是将Coordinate类中的两个对象实例化了对吧。那么Coordinate的构造函数如图一写成了Coordinate::Coordinate(int x,int y){m_iX=x;m_iY=y;cout<<"did it"<<endl;}这是有参数的构造函数,那不是矛盾了吗?构造函数有参数,对应的对象实例化的时候却是没有参数的
查看完整描述

3 回答

?
onemoo

TA贡献883条经验 获得超454个赞

你的问题“这两行代码是类的成员变量,同时也是将Coordinate类中的两个对象实例化了对吧”

不一定。


第二张图是 Line 的类声明,其中你画圈的代码是对其成员变量的描述。

像这样的非 static 成员变量的实例化代码,要么出现在 Line 构造函数的成员初始化列表中,如:

// 构造函数参数列表后面冒号后的部分就是“成员初始化列表”
// 成员变量的初始化推荐放在这里
Line(int x1, int y1, int x2, int y2) : m_coorA(x1, y1), m_coorB(x2, y2) { ... }

要么,在 C++11 标准之后,也可以在类中(你画圈的地方)提供初值,必须用等于号或者大括号的初始化形式,如:

class Line {
...
private:
    Coordinate m_coorA{ ... };  // C++11之后,你可以在这里用大括号形式调用构造函数
...
};

在类实例化时,成员变量可通过以上两种方式进行实例化。如果都没有提供,成员变量会被默认构造。

鉴于你说没有编译失败,虽然你没有提供构造函数的实现代码,推测是使用了成员初始化列表的方式进行了成员的初始化。

查看完整回答
反对 回复 2019-09-07
  • 3 回答
  • 0 关注
  • 798 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信