一、拷贝构造函数
拷贝构造函数是什么?
当用另一个对象来实例化一个新的对象时,调用的不是我们之前定义的普通构造函数,而是调用拷贝构造函数。我们可以拷贝构造函数中将要拷贝的对象的一些数组成员复制新的实例化对象。
简而言之,拷贝构造函数用于对象的复制。
定义格式
类名(const 类名&变量名)
Student(const Student &stu) //其中stu是被拷贝的对象变量名
Student stu1;
Student stu2=stu1;//执行拷贝构造函数
Student stu3(stu1);//执行拷贝构造函数
二、浅拷贝
浅拷贝就是简单的复制数据成员
class Student
{
public:
Student();
Student(const Student& stu){
age=stu.age;
score=stu.score;
}
private:
int age;
int score;
};
三、深拷贝
深拷贝涉及到数据成员是指针,为了不让拷贝后的指针指向同一片区域,我们不能简单地把指针拷贝,而是拷贝指针指向的内存的内容
class Student
{
public:
Student()
Student(const Student& stu){
age=stu.age;
subjectsScore = new int[7];
for(int i=0;i<7;i++)
{subjectsScore[i]=stu.subjectsScore[i];}
}
private:
int age;
int *subjectsScore;
};
补充
拷贝构造函数什么时候调用
- 用一个对象去初始化另一个对象时候调用拷贝构造函数
- 当类对象作为形参时候,会调用拷贝构造函数
- 当类对象作为返回值的时候,会拷贝构造函数
这就是为什么拷贝构造函数里面要用引用
Student(const Student &stu)
如果不用引用去定义拷贝构造函数,那么对象作为形参又会调用拷贝构造函数,如此套娃,就不行了。