C++类中的成员可以是另一个类中的对象,我们称该成员为 对象成员
例如:
class A{};
class B
{
A a;
};
B类中有对象A作为成员,A为对象成员
那么当创建B对象时,A与B的构造和析构的顺序谁先谁后?
举例:
class Phone
{
public:
Phone(string pName)
{
m_Pname = pName;
}
//手机品牌名称
string m_Pname;
};
class Person
{
public:
Person(string name, string pName):m_name(name),m_phone(pName)//相当于Phone m_phone = pName,即隐式转换法
{
}
//姓名
string m_name;
//手机
Phone m_phone;
};
void test01()
{
Person p("ss", "iPhone");
cout << p.m_name << "拿着" << p.m_phone.m_Pname << endl;
}
运行结果:
那么,先有的人还是先有的手机呢?
打印输出一下:
Phone(string pName)
{
cout << "Phone的构造函数调用" << endl;
m_Pname = pName;
}
Person(string name, string pName):m_name(name),m_phone(pName)//相当于Phone m_phone = pName,即隐式转换法
{
cout << "Person的构造函数调用" << endl;
}
再次运行结果:
可以看到,先创建的手机,再创建的人。
即:当其他类的对象作为本类的成员,在构造时先构造其他类对象,再构造本类对象。
同理,析构顺序:(可以看出与构造顺序相反)