类对象作为类成员(5)

C++中类的成员可以是另一个类的对象,我们称该成员为 对象成员

创建的顺序和构造的顺序是重点!

1 class A {}
2 class B
3 {
4     A a;
5 };

B类中有A作为成员,A为 对象成员

那么当创建B对象时,A和B的构造顺序是谁先谁后?(我初步猜测是A!因为A最先创建对象)

那么当创建B对象时,A和B的析构顺序是谁先谁后?

验证一下:

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 
 5 //类对象作为类成员
 6 //手机类
 7 class Phone
 8 {
 9 public: 
10 
11     Phone(string pName):m_PName(pName)
12     {
13         cout << "Phone的构造函数调用!" << endl;
14     }
15     
16     ~Phone()
17     {
18         cout << "Phone的析构函数调用!" << endl;
19     }
20 
21     string m_PName;
22 };
23 
24 //人类
25 class Person
26 {
27 public:
28 
29     //m_Phone(pname)等价于Phone m_Phone = Phone(pName)(有参构造函数)等价于Phone m_Phone = pName 隐式转换法
30     Person(string name, string pname):m_Name(name),m_Phone(pname)//所以没有报错
31     {
32         cout << "Person的构造函数调用!" << endl;
33     }
34 
35     ~Person()
36     {
37         cout << "Person的析构函数调用!" << endl;
38     }
39 
40     string m_Name;
41     Phone m_Phone;//这是一个对象成员(类)
42 };
43 
44 //结论:当其他类对象作为本类成员,构造的时候先构造其他类的对象,在构造自身,析构顺序?析构的顺序与构造相反!
45 //结论:Phone类对象m_Phone作为Person类的成员,构造的时候先构造m_Phone,再构造Person(构造==构造函数!)
46 void test_01(void)
47 {
48     Person p("张三", "苹果");
49 
50     cout << p.m_Name << "使用的是" << p.m_Phone.m_PName << "手机!" << endl;
51 }
52 
53 int main(void)
54 {
55     test_01();
56 
57     system("pause");
58     return 0;
59 }

 

 咱们怎么去理解呢?

根据前面的经验:谁先创建对象,谁的构造函数最先被调用。

析构的顺序:构造函数先被调用的最后释放。

 

posted @ 2020-04-14 11:10  坦率  阅读(298)  评论(0编辑  收藏  举报