文章目录构造函数的初始化列表需要显式初始化列表的场景初始化顺序构造函数的初始化列表构造函数对数据成员进行初始化还可以通过成员初始化列表的方式完成。语法格式构造函数名(参数表):成员1(初始值参数),成员2(初始值参数){}实例#includeiostreamusingnamespacestd;classStudent{private:string m_name;intm_age;intm_no;public:Student(conststringname,intage,intno):m_name(name),m_age(age),m_no(no){coutStudent constructorendl;}voidsetName(conststringname){m_namename;}voidsetAge(intage){if(age0)cout无效年龄endl;elsem_ageage;}voidsetNo(intno){m_nono;}voidsleep(inthour){cout我睡了hour小时endl;}voideat(conststringfood){cout我正在吃foodendl;}voidlearn(conststringcourse){cout我正在学习courseendl;}voidwho(){cout我叫: m_name 我今年m_ageendl;}};intmain(void){Students1(张飞,21,10003);s1.who();s1.eat(烧烤);Students2(刘备,28,10000);s2.who();s2.learn(C);return0;}需要显式初始化列表的场景一般而言使用初始化列表和在构造函数体对成员变量进行赋初值两者区别不大可以任选一种但是下面几种场景必须要使用初始化列表:如果有类类型的成员变量(成员子对象)而该类又没有无参构造函数则必须要通过初始化列表显式指明其初始化方式“const”修饰的成员变量(常成员变量)必须要在初始化列表中初始化“引用型”成员变量必须要在初始化列表中初始化#includeiostreamusingnamespacestd;classA{private:intm_data;public:A(intdata){coutA(int)endl;m_datadata;}};classB{private:A m_a;public:B(void):m_a(123){coutB(void)endl;}};intmain(void){B b;//一定会去构造成员对象m_a , 未指定如何构造系统去调用m_a的无参构造函数return0;}#includeiostreamusingnamespacestd;intnum12;classA{public:intm_r;constintm_c;/* * error A(void){ m_r num; m_c 100; } */A(void):m_r(num),m_c(100){}};intmain(void){A a;couta.m_r a.m_cendl;return0;}初始化顺序类中成员变量按声明顺序依次被初始化而与初始化表中的顺序无关#includeiostreamusingnamespacestd;classA{public:A(inta){coutA constuctorendl;}};classB{public:B(intb){coutB constuctorendl;}};classC{private:A m_a;B m_b;public:C(inta,intb):m_b(b),m_a(a){}};intmain(void){Cc(1,2);return0;}