成员初始化列表

#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/zmx
0 5
4 4


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

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

 
 

Y(int val):j(val){

i=j;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值