很多人在习惯上在声明变量时就赋上初值,但对于c++类中的数据成员能否这样做呢?如下:
class b
{
int x=0;
int y=1;
//...
};
其实在早些的版本是不能的,早先的版本一般都是借助构造函数或者成员函数等等来实现,
class b
{
public:
b()
{
x=0;
y=1;
}
void setNum(int a,int b)
{
x=a;
y=b;
}
//...
private:
int x;
int y;
};
但是c++11标准下能这样写了
虽然在一定程度上这样写破坏了类的抽象性,但是却能带来一定的便利。但这也是抽象出来共有的属性啊,并且这样写后也可以通过构造函数中初始化的值会覆盖掉声明时初始化的值;初始化列表初始化的变量值覆盖掉声明时初始化的值;构造函数中初始化的值又会覆盖掉初始化列表的值。
class A
{
public:
A()
{
x = 0;
cout << "执行构造函数,给成员变量x赋值。(y不变)" << endl;
}
A(int a, int b) :y(b)
{
x = a;
cout << "执行构造函数,给成员变量x赋值。通过初始化列表初始化y" << endl;
}
A(int a, int b, int c) :x(6)
{
x = a;
cout << "执行构造函数,构造函数中初始化的a又会覆盖掉初始化列表的6" << endl;
}
void print()
{
cout << "x=" << x << ",y=" << y << endl;
}
private:
int x = 2;
int y = 2;
int z;
};
int main()
{
A a;
a.print();
A b(9, 8);
b.print();
A c(9, 8, 9);
c.print();
}