#include <iostream>
using namespace std;
class Point2D
{
public:
Point2D(int val) :y(val),x(y)
{
}
private:
int x;
int y;
public:
void show()
{
cout << x << " " << y << endl;
}
}; // class Point2D
int main()
{
Point2D point(2);
point.show();
return 0;
}
-----------------------------分割线------------------------
point.x和point.y的值分别是什么?
结果如下:
结果中,y正常赋值了,x却没有,这是为什么呢?
其实,有规定这样初始化的时候是按照成员变量申明的顺序来的,先申明的x,所以先初始化x(y),这个时候y还没有初始化,结果就是一个未知数;然后才开始初始化y,为val。
改下下面的代码就正确了:
#include <iostream>
using namespace std;
class Point2D
{
public:
Point2D(int val) :y(x),x(val)
{
}
private:
int x;
int y;
public:
void show()
{
cout << x << " " << y << endl;
}
}; // class Point2D
int main()
{
Point2D point(2);
point.show();
return 0;
}
此时,输出结果为:
初始化顺序仅与声明顺序相关,与构造函数中的位置无关。
版权声明:本文为博主原创文章,未经博主允许不得转载。