声明顺序

#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;
}

此时,输出结果为:


初始化顺序仅与声明顺序相关,与构造函数中的位置无关。


版权声明:本文为博主原创文章,未经博主允许不得转载。

posted @ 2012-04-26 23:58  wangicter的博客  阅读(297)  评论(0编辑  收藏  举报