我们发现先调用的是Phone的构造函数 说明类对象作为类成员 先调用类成员的构造函数
由先进后出的原则 类对象的析构函数也是最后调用的

[] [c++]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include<bits/stdc++.h>
using namespace std;
//类对象作为类成员

class Phone
{
public:
~Phone()
{
cout<<"Phone的析构函数的调用"<<endl;
}
Phone()
{
cout<<"Phone的无参构造函数的调用"<<endl;
}
Phone(string pName)
{
cout<<"Phone的有参构造函数的调用"<<endl;
m_PName=pName;
}

//手机品牌名称
string m_PName;
};


class Person
{
public:
//有了有参构造函数 不会自动提供无参构造函数
Person()
{
cout<<"Person默认构造函数的调用"<<endl;
}

~Person()
{
cout<<"Person析构函数的调用"<<endl;
}

//Phone m_Phone=pName 其实是一个隐式构造法 刚好m_PName也是string类型
Person(string name,string pName)
{
cout<<"Person有参构造函数的调用"<<endl;
m_Name=name;
m_Phone= pName;
}
string m_Name;
Phone m_Phone;
};


void test01()
{
Person p("张三","Mate10");
//我们发现Phone先被调用
}


int main()
{
test01();
return 0;
}