在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。