拷贝函数经常用,经常看,但是每次忘了看,看了忘,所以这次花了点时间总结了一下,并写到这里。
1.定义
拷贝构造函数,又称为复制构造函数。拷贝构造函数是一种特殊的构造函数。函数的名称必须和类名称一致,它仅含一个本类型的引用变量的参数。一般情况下会加const限制。(因为拷贝构造函数通常是复制对象成员,而不修改原对象,所以通常加const)。声明形式如下:
类名(const 类名 & )比如:A(const A & obj)
通常来讲,如果你没有声明一个拷贝构造函数,那么编译器会帮你生成一个默认的拷贝构造函数(仅仅是浅拷贝,关于深拷贝与浅拷贝,自行百度)。当然如果你自己定义了一个拷贝构造函数后,那么当调用构造函数的时候会调用你自己定义的拷贝构造函数。
2.拷贝构造函数的用法
通常来讲,拷贝构造函数有4个常用的应用场景。
(1)用对象1来初始化对象2
class A
{
public:
A()//无参默认的构造函数
{
cout << "构造函数" << endl;
}
A(int _a)//有一个参数的构造函数
{
a = _a;
}
A(const A &obj)//拷贝构造函数
{
a = obj.a;
}
int getA()
{
return a;
}
~A()
{
cout << "析构函数" << endl;
}
private:
int a;
};
int main()
{
A a1(10);
A a2 = a1;//拷贝构造函数的第一种应用场景,调用拷贝构造函数
return 0;
}
(2)第二个应用场景
A a3(a1);//调用拷贝构造函数
(3)对象作为函数参数
void fun(A a)
{
cout<<"function"<<a.getA()<<endl;
}
void play()
{
A a(10);
fun(a);
}
(4)返回一个临时对象时要调用拷贝构造函数
A fun2()
{
A a4(2);
return A;
}
void objPlay()
{
//这种情况调用3次构造函数
A a5;
a5 = fun2();
//仅仅只是调用两次构造函数 ,少了一次默认构造函数
//A a5 = fun2();
}
void main()
{
objPlay();
system("pause");
}
以上基本就是拷贝函数的常见4种应用场景。欢迎大家一起学习讨论。在不足之处还请各位大神提出。