1、拷贝构造函数定义和调用
class Person {
public:
Person()
{
cout<<"无参构造函数!"<<endl;
}
//拷贝构造函数
Person(const Person& p) {
age = p.age;
cout << "拷贝构造函数!" << endl;
}
public:
int age;
};
int main()
{
Person p1; //无参构造函数!
Person p2(p1); //拷贝构造函数!
Person p3 = p1;//拷贝构造函数!
}
2、拷贝构造函数使用时机
2.1使用一个已经创建完毕的对象来初始化一个新对象。如上例。
2.2值传递的方式给函数参数传值。
#include <iostream>
using namespace std;
class Person
{
public:
Person()
{
cout<<"无参构造函数!"<<endl;
mAge = 0;
}
Person(int age)
{
cout<<"有参构造函数!"<<endl;
mAge = age;
}
Person(const Person& p)
{
cout<<"拷贝构造函数!"<<endl;
mAge = p.mAge;
}
public:
int mAge;
};
void dowork1(Person p1) //"Person p1" 形参
{
}
void test1(){
Person p; //输出:无参构造函数
//"p" 实参,这里传参会调用拷贝构造函数,拷贝一个新的对象,比如是"XXXXX";
//上面dowork1中对p1操作,其实就是对拷贝出来这个对象"XXXXX"操作;
//因此在上面dowork1中对形参p1的操作不会影响这里的p。
dowork1(p);
}
int main()
{
test1();
return 0;
}
2.3以值方式返回局部对象。
#include <iostream>
using namespace std;
class Person
{
public:
Person()
{
cout<<"无参构造函数!"<<endl;
mAge = 0;
}
Person(int age)
{
cout<<"有参构造函数!"<<endl;
mAge = age;
}
Person(const Person& p)
{
cout<<"拷贝构造函数!"<<endl;
mAge = p.mAge;
}
public:
int mAge;
};
Person dowork2()
{
Person p1; //创建一个对象p1。输出:无参构造函数!
return p1; //返回时根据p1创建一个新的对象,比如是"XXXXX"
}
void test2(){
Person p = dowork2(); //创建一个p来接收上面那个新对象"XXXXX",这里调用拷贝构造函数。
}
int main()
{
test2();
return 0;
}