当类对象作为另一个类的成员时,有一些我们值得注意的事。
1.需要初始化的数据成员是类类型
数据成员是对象,并且这个对象只有含参数的构造函数,没有无参数的构造函数, 这种情况下必须使用初始化列表。
如果我们有一个类成员,它本身是一个类或者是一个结构,而且这个成员它只有一个带参数的构造函数,而没有默认构造函数,这时要对这个类成员进行初始化,就必须调用这个类成员的带参数的构造函数,如果没有初始化列表,那么他将无法完成第一步,就会报错。
class Phone {
public:
Phone(string pName) {
m_PName = pName;
cout << "phone" << endl;
}
~Phone() {
cout << "phone的析构" << endl;
}
string m_PName;
};
class Person {
public:
//初始化列表初始化属性
// Phone m_Phone = pName 隐式转换法,使用字符串对对象进行初始化操作
Person(string name,string pName):m_Name(name),m_Phone(pName)
{
cout << "person" << endl;
}
~Person()
{
cout << "person析构" << endl;
}
string m_Name;
Phone m_Phone;
};
2.构造函数与析构函数的调用顺序
当其他类对象作为本类成员,构造时候先构造类对象,再构造自身,析构的顺序与构造相反
上述代码段的运行结果