C++深拷贝例子

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
应该是m_height的值是空??地址里面没数据?
第二天重新打开项目运行可以正常出结果了!没有前一天的报错!
求哪位大佬讲解一下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
设计并实现一个动态整型数组类Vect,要求: (1)实现构造函数重载,可以根据指定的元素个数动态创建初始值为0的整型数组,或根据指定的内置整型数组动态创建整型数组。 (2)设计拷贝构造函数和析构函数,注意使用深拷贝。 (3)设计存取指定位置的数组元素的公有成员函数,并进行下标越界,若越界则输出“out of boundary”。 (4)设计获取数组元素个数的公有成员函数。 (5)设计用于输出数组元素的公有成员函数,元素之间以空格分隔,最后以换行符结束。 在main函数中按以下顺序操作: (1)根据内置的静态整型数组{1,2,3,4,5}构造数组对象v1,根据输入的整型数构造数组对象v2。 (2)调用Vect的成员函数依次输出v1和v2的所有元素。 (3)输入指定的下标及对应的整型数,设置数组对象v1的指定元素。 (4)根据数组对象v1拷贝构造数组对象v3。 (5)调用Vect的成员函数依次输出v1和v3的所有元素。 设计并实现一个动态整型数组类Vect,要求: (1)实现构造函数重载,可以根据指定的元素个数动态创建初始值为0的整型数组,或根据指定的内置整型数组动态创建整型数组。 (2)设计拷贝构造函数和析构函数,注意使用深拷贝。 (3)设计存取指定位置的数组元素的公有成员函数,并进行下标越界,若越界则输出“out of boundary”。 (4)设计获取数组元素个数的公有成员函数。 (5)设计用于输出数组元素的公有成员函数,元素之间以空格分隔,最后以换行符结束。 在main函数中按以下顺序操作: (1)根据内置的静态整型数组{1,2,3,4,5}构造数组对象v1,根据输入的整型数构造数组对象v2。 (2)调用Vect的成员函数依次输出v1和v2的所有元素。 (3)输入指定的下标及对应的整型数,设置数组对象v1的指定元素。 (4)根据数组对象v1拷贝构造数组对象v3。 (5)调用Vect的成员函数依次输出v1和v3的所有元素。
拷贝深拷贝是在C++中涉及对象拷贝构造函数和赋值运算符重载的概念。 浅拷贝是指将对象的成员变量简单地逐位复制到另一个对象,这会导致两个对象的成员变量共享同一块内存。而深拷贝则是创建一个新的对象,并将原对象的成员变量逐位复制到新对象中,两个对象的成员变量分别占用不同的内存空间。 下面是一个示例代码: ```cpp#include <iostream> #include <cstring> class String { private: char* data; int size; public: // 构造函数 String(const char* str) { size = strlen(str); data = new char[size +1]; strcpy(data, str); } // 拷贝构造函数 String(const String& other) { size = other.size; data = new char[size +1]; strcpy(data, other.data); } // 赋值运算符重载 String& operator=(const String& other) { if (this == &other) { return *this; } delete[] data; size = other.size; data = new char[size +1]; strcpy(data, other.data); return *this; } // 析构函数 ~String() { delete[] data; } void print() { std::cout << data << std::endl; } }; int main() { String str1("Hello"); String str2 = str1; // 浅拷贝 String str3("World"); str3 = str1; // 深拷贝 str1.print(); // 输出 "Hello" str2.print(); // 输出 "Hello" str3.print(); // 输出 "Hello" return0; } ``` 在上面的示例中,`String` 类包含了一个字符数组 `data` 和一个整数 `size`,用于存储字符串和字符串长度。在构造函数中,我们使用 `new` 运算符为 `data` 动态分配内存,并将传入的字符串复制到 `data` 中。在拷贝构造函数中,我们也是通过动态分配内存并复制成员变量来实现拷贝。在赋值运算符重载函数中,我们首先释放原有的内存,然后再进行深拷贝。 在 `main` 函数中,我们创建了三个 `String` 对象:`str1`、`str2` 和 `str3`。其中,`str2` 是通过拷贝构造函数进行浅拷贝得到的,而 `str3` 是通过赋值运算符重载进行深拷贝得到的。最后,我们分别打印了三个对象的内容,可以看到浅拷贝的对象共享同一块内存,而深拷贝的对象拥有独立的内存空间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值