初始化列表
初始化列表:初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段(变量名+(初始化值))
案例
class Foo { private: string name ; int id ; public: Foo(string s, int i):name(s), id(i){} ; };
|
注:类成员的初始化顺序与初始化列表的顺序无关,与类里面属性定义的顺序有关
类之间初始化顺序:
父类构造函数–>成员类对象构造函数(按照类定义顺序而不是初始化列表的顺序)–>类自身构造函数
类本身初始化覆盖顺序
先进行声明时初始化,然后进行初始化列表初始化,最后进行构造函数初始化。即初始化列表初始化的变量值会覆盖掉声明时初始化的值,而构造函数中初始化的值又会覆盖掉初始化列表的
案例
1 #include "stdafx.h" 2 #include <iostream> 3 using namespace std; 4 class A 5 { 6 public: 7 int a = 1; 8 A() {} 9 A(int a_):a(a_){} 10 A(int a_, bool b) :a(4) { a = a_; } 11 }; 12 13 int main() 14 { 15 A a1, a2(3), a3(5, true); 16 cout << "a1.a=" << a1.a << endl; 17 cout << "a2.a=" << a2.a << endl; 18 cout << "a3.a=" << a3.a << endl; 19 system("pause"); 20 return 0; 21 }
|