private: Goods *gs; //用于建立堆区数组,存放商品信息 int nums; //堆区数组中的元素个数(商品种类数) float value;//购物所需总金额 Shopping_list::Shopping_list(const Shopping_list & m)//拷贝构造函数,实现“深拷贝” {//在此补充本段代码,实现“深拷贝” }
时间: 2023-08-12 16:03:28 浏览: 77
算法/编程练习:两个有序数组的中位数
假设 `Goods` 类已经实现了拷贝构造函数,可以这样实现 `Shopping_list` 的深拷贝:
```c++
Shopping_list::Shopping_list(const Shopping_list & m) {
nums = m.nums;
value = m.value;
if (nums > 0) {
// 分配新的内存
gs = new Goods[nums];
// 复制数据
for (int i = 0; i < nums; ++i) {
gs[i] = m.gs[i]; // 调用 Goods 的拷贝构造函数
}
} else {
gs = nullptr;
}
}
```
注意,这里需要先复制 `nums` 和 `value` 两个基本类型成员变量,然后对指针成员变量 `gs` 进行深拷贝。同时,为了避免对空指针进行解引用等操作,需要在构造函数中对 `gs` 进行初始化为 `nullptr`。
阅读全文