类成员变量的初始化
C++11中在初始化时可以使用 = ,也可以使用 {} ,也可以使用 ={} ;
需要注意的是:类中的静态成员变量只有静态常量,并且类型是整型或者枚举类型,才能在类内初始化,其他都得在类外初始化。
#include <iostream>
using namespace std;
class Base {
public:
Base(){
}
Base(int num){
}
int a = { 4 };
int b{ 1 };
double cc = 1.23;
char aa = 'a';
string str = "hello";
string str1{ "world" };
//string str2("hello,world"); //用()则会报错,类内不能用()初始化,在类外这个是有参构造,可以使用。
string str3 = { "hello" };
static int c;
static const double d;
static const char* const e; //静态常量字符数组指向静态字符数组
// 变量是静态常量,并且类型是整型或者枚举类型,才能在类内初始化,其他都得在类外初始化。
const static int f = 0; //const static 和 static const 意义相同,没有区别
};
int Base::c = 8;
const double Base::d = 3.14;
const char* const Base::e = "i am luffy";
int main() {
int ab { 4 };
string str7 = { "hello" };
string str8("888");
string str9 { "888888" };
return 0;
}
另外还提供了初始化列表:
#include <iostream>
using namespace std;
class c {
public:
c() :m_num(66), a(3), b(3) {
}
c(int n1, int n2, int n3) : m_num(n1),a(n2), b(n3){
}
int m_num = 8;
int a;
int b;
};
int main() {
c c1;
c c2(11,22,33);
cout << "c1.m_num = " << c1.m_num << " c1.a = " << c1.a << " c1.b = " << c1.b << endl;
cout << "c2.m_num = " << c2.m_num << " c2.a = " << c2.a << " c2.b = " << c2.b << endl;
system("pause");
return 0;
}
输出结果:
c1.m_num = 66 c1.a = 3 c1.b = 3
c2.m_num = 11 c2.a = 22 c2.b = 33
使用初始化列表初始化成员变量
且从上面的程序中说明先运行了int m_num = 8; 之后才进行初始化的m_num{66};
那么和之前的this->m_num = a;初始化方式比较谁先运行呢?
class c {
public:
c(int n1, int n2, int n3) : m_num(n1),a(n2), b(n3){
this->m_num = 99999;
}
int m_num = 8;
int a;
int b;
};
int main() {
c c2(11,22,33);
cout << "c2.m_num = " << c2.m_num << " c2.a = " << c2.a << " c2.b = " << c2.b << endl;
system("pause");
return 0;
}
输出结果:
c2.m_num = 99999 c2.a = 22 c2.b = 33
说明this->m_num = 99999;这种初始化方式是最后执行的。

浙公网安备 33010602011771号