C++拷贝构造函数(复制构造函数)
C++拷贝构造函数(也叫复制构造函数)是一种特殊的构造函数,用于创建一个对象,该对象是通过复制另一个同类型对象的数据来创建的。拷贝构造函数通常在以下情况下被调用:
- 当用一个已经存在的对象去初始化一个新的对象时。
- 当对象作为函数的参数按值传递时。
- 当对象作为函数的返回值返回时。
拷贝构造函数的语法如下:
ClassName(const ClassName& obj)
{
// 对象成员的复制操作
}
其中,ClassName
表示类名,obj
是要复制的对象。
以下是一个示例,演示了拷贝构造函数的使用:
#include <iostream>
using namespace std;
class Point {
public:
int x, y;
Point(int x = 0, int y = 0) {
this->x = x;
this->y = y;
}
// 拷贝构造函数
Point(const Point& p) {
x = p.x;
y = p.y;
}
};
int main() {
Point p1(1, 2); // 构造函数
Point p2 = p1; // 拷贝构造函数
cout << "p1.x = " << p1.x << ", p1.y = " << p1.y << endl;
cout << "p2.x = " << p2.x << ", p2.y = " << p2.y << endl;
return 0;
}
运行结果:
p1.x = 1, p1.y = 2
p2.x = 1, p2.y = 2
在上面的示例中,我们定义了一个 Point
类,它包含两个整型成员变量 x
和 y
。拷贝构造函数 Point(const Point& p)
用于复制另一个 Point
对象 p
的数据来创建新对象。在 main
函数中,我们先创建一个 Point
对象 p1
并进行初始化,然后通过拷贝构造函数将其复制给 p2
。最后,我们打印出 p1
和 p2
的成员变量的值,可以看到它们是相同的。
需要注意的是,如果我们没有显式地定义拷贝构造函数,编译器会自动生成一个默认的拷贝构造函数,它会将一个对象的所有成员变量值复制给另一个对象。但是,如果类中存在指针成员变量,则需要我们自己实现拷贝构造函数来进行深拷贝,以避免浅拷贝带来的问题。