在C++11中允许在类定义时对成员变量初始化。
class A
{
public:A() { }void show(){cout << "m_a = " << m_a << endl;cout << "m_b = " << m_b << endl;}
private:int m_a = 10;//类定义时初始化int m_b; //没有初始化
};int main()
{A a;a.show();return 0;
}
如果在构造函数中也有赋值,以赋值的为准,这个就和普通变量一样,初始化的值会被后面的赋值覆盖。
class A
{
public:A(int b=0):m_b(b){}A(int a, int b) :m_a(a), m_b(b){}void show(){cout << " m_a = " << m_a << endl;cout << " m_b = " << m_b << endl;}
private:int m_a = 10;//类定义时初始化int m_b; //没有初始化
};int main()
{A a;cout << "a的数据:" << endl;a.show();A b{ 100 };cout << "b的数据:" << endl;b.show();A c{ 1000,2000 };cout << "c的数据:" << endl;c.show();return 0;
}
说明:
(1).第20行,A a;调用第4行的构造函数,m_a是第10行的初始值10,m_b是b的默认参数0。
(2).第24行,A b{ 100 };调用第4行构造函数,m_a是第10行的初始值10,m_b是传入的实参100。
(3).第28行,A c{ 1000,2000 };调用第6行构造函数,m_a是传入的实参1000,m_b是传入的实参2000。