Cplusplus拷贝构造函数怎么写
时间: 2023-09-30 09:05:04 浏览: 107
拷贝构造函数是一种特殊的构造函数,用于创建一个对象的副本。它接受一个同类的对象作为参数,并将其成员变量的值复制到新对象中。在C++中,拷贝构造函数的声明形式如下:
```C++
class MyClass {
public:
MyClass(); // 默认构造函数
MyClass(const MyClass& other); // 拷贝构造函数
// ...
};
```
其中,`other`是要被拷贝的对象。下面是一个简单的例子,演示了如何实现拷贝构造函数:
```C++
#include <iostream>
class MyClass {
public:
MyClass() : x(0), y(0) {} // 默认构造函数
MyClass(const MyClass& other) : x(other.x), y(other.y) {} // 拷贝构造函数
void print() const { std::cout << "x = " << x << ", y = " << y << std::endl; }
private:
int x, y;
};
int main() {
MyClass obj1;
obj1.print(); // 输出 "x = 0, y = 0"
MyClass obj2(obj1); // 调用拷贝构造函数
obj2.print(); // 输出 "x = 0, y = 0"
return 0;
}
```
在上面的例子中,我们定义了一个`MyClass`类,并实现了默认构造函数和拷贝构造函数。在`main`函数中,我们首先创建了一个`MyClass`对象`obj1`,然后调用其`print`方法输出成员变量的值。接着,我们使用`obj1`来创建一个新对象`obj2`,这里调用了拷贝构造函数。最后,我们再次调用`print`方法,验证了`obj2`的成员变量与`obj1`相同。
需要注意的是,如果一个类中没有实现拷贝构造函数,C++会自动生成一个默认的拷贝构造函数,该函数执行的是浅拷贝操作,即简单地将成员变量的值复制到新对象中。如果类中包含了指针类型的成员变量,那么浅拷贝会导致多个对象共享同一块内存,这可能会导致程序出错。因此,在包含指针类型成员变量的类中,需要手动实现拷贝构造函数,进行深拷贝操作。
阅读全文