拷贝构造函数调用的三种情况:
1.使用一个已经创建完毕的对象来初始化一个新对象
2.值传递的方式给函数参数传值
3.以值方式返回局部对象
#include <iostream>
using namespace std;
class Person
{
public:
int age;
Person()
{
cout<<"构造函数"<<endl;
}
Person(int _age)
{
age=_age;
cout<<"有参构造函数"<<endl;
}
Person(const Person &p)
{
this->age=p.age;
cout<<"拷贝构造函数"<<endl;
}
~Person()
{
cout<<"析构函数"<<endl;
}
};
//1.使用一个已经创建完毕的对象来初始化一个新对象
void func1()
{
cout<<"func1()调用顺序:"<<endl;
Person p1(10);
Person p2(p1);
}
//2.值传递的方式给函数参数传值
void tool1(Person p)
{
cout<<"*****工具函数*****"<<endl;
}
void func2()
{
cout<<endl;
cout<<"func2()调用顺序:"<<endl;
Person p1;
tool1(p1);
}
//3.以值方式返回局部对象
Person tool2()
{
Person p;
cout<<&p<<endl;
return p;
}
void func3()
{
cout<<endl;
cout<<"func3()调用顺序:"<<endl;
Person p1=tool2();
cout<<&p1<<endl;
}
int main()
{
std::cout << "Hello, World!" << std::endl;
func1();
func2();
func3();
return 0;
}
输出结果: