学习目标:
掌握C++拷贝构造函数
- 如何实现拷贝构造函数
- 什么是拷贝构造函数
学习内容:
实现C++拷贝构造函数
学习时间:
五分钟快乐学习
学习产出:
进行上机实验,明白拷贝构造函数与构造函数的区别与联系
- 技术笔记 2 遍
- CSDN 技术博客 3 篇
- 习的 vlog 视频 1 个
C++拷贝构造函数
在C++中,与类名同名,且形参是本类对象的引用类型的函数,叫做拷贝构造函数(Copy Constrctor),与构造函数一样,当我们不主动定义的时候,系统也会自动生成一个,进行两个对象成员之间对应的简单赋值,用来初始化一个对象,如以下的情形:
#include<iostream>
using namespace std;
#define PI 3.1415
class Circle
{
private:
double R;
public:
Circle(double R);
Circle(Circle& A);
double area();
double girth();
};
Circle::Circle(double R)
{
cout << "Constructor" << endl;
this->R = R;
}
Circle::Circle(Circle& A)
{
cout << "Copy Constructor" << endl;
this->R = A.R;
}
double Circle::area()
{
return PI * R * R;
}
double Circle::girth()
{
return 2 * PI * R;
}
int main()
{
Circle A(5);
Circle B(A);
return 0;
}
本例中定义了一个Circle圆形类,分别定义了带参数的构造函数和拷贝构造函数,然后在主函数中定义A对象,并传入初始值,调用带参数的构造函数。及定义B对象,通过A对象来初始化B对象。运行结果如下:
第一次定义的A对象调用带参数的构造函数,第二个B对象由于是通过A对象来初始化,所以调用拷贝构造函数。在开头我们提到如果我们不主动定义拷贝构造函数,也会自动为我们生成一个,那我们为何还要自己定义呢?那是因为,默认的拷贝构造函数仅仅是做简单的赋值,有些情况则要出现问题。