概要
带参构造和初始化列表赋值区别
技术细节
//手机类phone
class phone
{
public:
phone()
{
cout << "phone无参构造" << endl;
}
phone(string name)
{
this->name = name;
cout << "phone带参构造" << endl;
}
private:
string name;
};
//类对象作为类成员
class Person
{
public:
Person(string name1, string pName) : name(name1), ph(pName)
{
//this->name = name1;
//ph = pName;
}
private:
string name;
phone ph;
};
Person类中有个手机类对象作为Person类的一个成员,如果直接如图中初始化列表方式给ph赋值,其实就是做了一个默认的操作Phone ph = pName; 这样ph直接是调用Phone类中的带参构造,不会调用无参构造。如果按照注释的方式赋值,实际做了两步操作,第一步:Phone ph;(已经在私有里面定义好了) 第二步: Ph = pName; 第一步ph调用无参构造,第二步ph对象又被赋值会调用带参构造。
需要注意的是当进行完第二步后此时的ph为带参构造的对象,第一步的无参构造的ph立刻销毁会调用析构函数,在屏幕上打印出来的顺序就是ph无参构造,ph带参构造,ph析构函数(析构的是无参构造的ph)
文章详细解释了在类Person中,使用初始化列表给phone类成员赋值时,会触发带参构造而非无参构造,以及在后续操作中可能涉及的析构函数。
1269

被折叠的 条评论
为什么被折叠?



