基本概念:

成员对象:一个类的成员变量是另一个类的对象

包含成员对象的类叫封闭类(若成员对象的构造函数中有参数,封闭类初始化时中必须进行对其进行初始化)

初始化列表:

  • 定义构造函数时,可添加初始化列表:

  类名::构造函数(参数表):成员变量1(参数表),成员变量2(参数表)...

  {

  ...

  }

  • 成员对象初始化列表中的参数可以是:表达式/函数/变量(函数和变量要先定义)

调用顺序:

当封闭类对象生成时,先执行所有成员对象的构造函数,再执行封闭类的构造函数

成员对象的构造函数调用顺序:

  • 和成员对象再类中的说明顺序一致
  • 与在成员初始化列表中出现的顺序无关

而析构函数调用的顺序与构造函数调用的顺序相反。

实例:

 1 /*
 2 三个类,封闭类为CCar
 3 */
 4 
 5 
 6 class CType
 7 {
 8 public:
 9     CType(int r, int w) :radius(r), width(w) { printf("Type\n"); };
10     ~CType();
11 
12 private:
13     int radius, width;
14 };
15 
16 CType::~CType()
17 {
18     printf("~Type\n");
19 }
20 
21 class CEngine
22 {
23 public:
24     CEngine();
25     ~CEngine();
26 
27 private:
28 
29 };
30 
31 CEngine::CEngine()
32 {
33     printf("Engine\n");
34 }
35 
36 CEngine::~CEngine()
37 {
38     printf("~Engine\n");
39 }
40 
41 class CCar
42 {
43 public:
44     CCar(int p, int tr, int tw);
45     ~CCar();
46 
47 private:
48     int price;
49     CType type;
50     CEngine engine;
51 };
52 
53 CCar::CCar(int p, int tr, int tw):price(p), type(tr, tw)
54 {
55     printf("Car\n");
56 }
57 
58 CCar::~CCar()
59 {
60     printf("~Car\n");
61 }
1 CCar C = { 20000, 17, 225 };//定义一个CCar的对象,初始化参数必须为3个
//输出结果
Type
Engine
Car
~Car
~Engine
~Type

 

posted on 2018-03-13 23:46  宵夜在哪  阅读(316)  评论(0编辑  收藏  举报