问题遇到的现象和发生背景
今天在学C++时候,看到“其他类对象作本类的成员时候的构造函数调用顺序”的问题,
问题相关代码,请勿粘贴截图
#include <iostream>
using namespace std;
#include <string>
class phone //-----------类phone
{
public:
phone()//默认构造函数
{
pname = "HuaWei";
}
phone (const phone &pn) :pname(pn.pname)// 拷贝构造函数
{
cout << "phone gouzao" << endl;
}
~phone()// 析构函数
{
//cout << "phone xigou" << endl;
}
string pname;
};
class person//--------类person
{
public:
person(string n, phone pn):name(n),p1(pn) // 有参构造函数
{
cout << "person gouzao" << endl;
}
~person()// 析构函数
{
//cout << "person xigou" << endl;
}
string name;
phone p1;
};
int main()
{
phone p; // 先定义phone对象p,主要用于p1传参
person p1("张三",p); // 传入“张三”字符串和phone对象p
}
运行结果及报错内容
我本以为的运行结果是先输出“phone gouzao”, 然后是“person gouzao”
而实际结果是
我的解答思路和尝试过的方法
在我逐步运行后发现,在走到person p1("张三",p); 这一步的时候先调动phone的拷贝构造函数;到person类的有参构造函数中又调用了phone的拷贝构造函数。
在这里我很迷惑
我想要达到的结果
求解!谢谢大家!