拷贝构造函数
在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对象来初始化,所以调用拷贝构造函数。
请大家也上机试验。
大家可能疑问,在开头我们提到如果我们不主动定义拷贝构造函数,也会自动为我们生成一个,那我们为何还要自己定义呢?那是因为,默认的拷贝构造函数仅仅是做简单的赋值,有些情况则要出现问题,这就涉及到深拷贝与浅拷贝,我们在下一节给大家详细介绍!
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程