C++ 深拷贝示例:使用类实现数组的深拷贝
下面是一个使用C++的类实现深拷贝的例子:
#include <iostream>
class Array {
private:
int* data;
int size;
public:
// 构造函数
Array(int sz) {
size = sz;
data = new int[size];
}
// 拷贝构造函数
Array(const Array& other) {
size = other.size;
data = new int[size];
for (int i = 0; i < size; i++) {
data[i] = other.data[i];
}
}
// 赋值运算符重载
Array& operator=(const Array& other) {
if (this == &other) {
return *this;
}
delete[] data;
size = other.size;
data = new int[size];
for (int i = 0; i < size; i++) {
data[i] = other.data[i];
}
return *this;
}
// 修改数组元素的函数
void setValue(int index, int value) {
if (index >= 0 && index < size) {
data[index] = value;
}
}
// 打印数组元素的函数
void print() {
for (int i = 0; i < size; i++) {
std::cout << data[i] << ' ';
}
std::cout << std::endl;
}
// 析构函数
~Array() {
delete[] data;
}
};
int main() {
Array arr1(5); // 创建一个数组对象
arr1.setValue(0, 1);
arr1.setValue(1, 2);
arr1.setValue(2, 3);
arr1.setValue(3, 4);
arr1.setValue(4, 5);
std::cout << "arr1: ";
arr1.print();
Array arr2 = arr1; // 使用拷贝构造函数进行深拷贝
std::cout << "arr2: ";
arr2.print();
arr2.setValue(0, 10); // 修改arr2的元素值
std::cout << "arr1: ";
arr1.print(); // arr1的元素值不受arr2修改的影响
return 0;
}
在这个例子中,我们定义了一个Array类,包含一个整型指针data和一个整型变量size,用于表示一个动态分配的整型数组。在类中,我们实现了构造函数、拷贝构造函数、赋值运算符重载、修改数组元素的函数和打印数组元素的函数。
在主函数中,我们首先创建一个Array对象arr1,然后给arr1的元素赋值。然后,我们使用拷贝构造函数将arr1深拷贝到arr2。接着,我们修改arr2的第一个元素的值,并打印arr1和arr2的元素。可以看到,arr2的修改不会影响到arr1,说明这是一个深拷贝。
原文地址: https://www.cveoy.top/t/topic/oOm0 著作权归作者所有。请勿转载和采集!