成员初始化列表

来源:互联网 发布:复制文件夹网络共享 编辑:程序博客网 时间:2024/06/09 04:17
#include <iostream>using namespace std;class X{private:    int i;    int j;public:    X(int val):j(val),i(j){    }    int geti(){        return i;    }    int getj(){        return j;    }};class Y{private:    int i;    int j;public:    Y(int val):j(val){        i=j;    }   int geti(){       return i;   }    int getj(){        return j;    }};int main(){    X x=X(5);    cout<<x.geti()<<" "<<x.getj()<<endl;    Y y=Y(4);    cout<<y.geti()<<" "<<y.getj()<<endl;    return 0;}

上面程序的输出是

/home/zmx/CLionProjects/zmx/cmake-build-debug/zmx0 54 4Process finished with exit code 0
成员初始化列表的顺序和成员的初始化顺序无关,程序按照成员被声明的顺序来初始化相关成员,所以i(j)先执行,但是程序员的意图是先用val初始化j,再用j初始化i.所以这与程序员的意图想违背。

采用如下定义,则能达到目的。

Y(int val):j(val){

i=j;

}


原创粉丝点击