想问下,在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之后,你可以在这里用大括号形式调用构造函数 ... };
在类实例化时,成员变量可通过以上两种方式进行实例化。如果都没有提供,成员变量会被默认构造。
鉴于你说没有编译失败,虽然你没有提供构造函数的实现代码,推测是使用了成员初始化列表的方式进行了成员的初始化。
- 3 回答
- 0 关注
- 798 浏览
添加回答
举报
0/150
提交
取消