猿问

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

https://img2.mukewang.com/5d69d22f000112f207700615.jpg

想问下,在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;

}

这是有参数的构造函数,那不是矛盾了吗?构造函数有参数,对应的对象实例化的时候却是没有参数的


韦德之道Chen
浏览 799回答 3
3回答

onemoo

你的问题“这两行代码是类的成员变量,同时也是将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之后,你可以在这里用大括号形式调用构造函数 ... };在类实例化时,成员变量可通过以上两种方式进行实例化。如果都没有提供,成员变量会被默认构造。鉴于你说没有编译失败,虽然你没有提供构造函数的实现代码,推测是使用了成员初始化列表的方式进行了成员的初始化。
随时随地看视频慕课网APP
我要回答