用成员列表初始化列表对数据成员初始化。
class D{
public:
D(int i):x(i),y(x+1)//用成员初始化列表对数据成员进行初始化
{
cout<<"x:"<<x<<endl;
cout<<"y:"<<y<<endl;
}
private:
int x;
int y;
};
int main()
{
D d(15);
return 0;
}
运行结果
x=1
y=15
有运行结果看到x不是16
原因:
数据成员是按照他们在类中的声明顺序进行初始化的;
private:
int x;
int y;
代码意思是用y+1来初始化x1,但是在私有成员的说明中,先声明的是x,然后声明y,因此在x用y+1初始化的时候,得到的是一个随机值,可能是1,也可能是-1,也可能是0等等。
用成员初始化列表对引用型的数据成员和const修饰的数据成员进行初始化
class A{
public:
A(int x1):x(x1),y(x),pi(3.14)//用成员初始化列表对引用类型的数据成员rx和
{ //const修饰的数据成员pi初始化
}
void print()
{
cout<<"x="<<x<<" "<<"y="<<y<<" "<<"pi="<<pi<<endl;
}
private:
int x;
int &y;//rx是整型变量的引用
const double pi; //pi是用const修饰的常量
};
int main()
{
A bbb(10);
bbb.print();
return 0;
}
运行结果
x=10 y=10 pi=3.14
对于const修饰的数据成员和引用型的数据成员不允许赋值语句直接赋值,此时体现了成员初始化列表对其进行初始化的方便之处。