我们发现先调用的是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; }
|