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