在动态整型数组类 CArray 中,添加深拷贝构造函数 ‌ 设计一个动态整型数组类 CArray ,并对CArray类进行测试 ‌ 数据成员: ‌ int *vec; // 动态数组指针 ‌ int size; //动态数组规模 ‌ 成员函数:public ‌ CArray(int n); // 构造函数,构造规模为n的数组 ‌ CArray (CArray &arr); //拷贝构造函数 ‌ ~CArray(); //析构函数,释放动态数组空间 ‌ int length(); // 取数组元素个数 ‌ int get(int i); // 取数组第i个元素 ‌ void set(int i, int value); // 设置数组第i个元素 ‌ int getMax(); // 取数组最大元素 ‌ int getMin(); // 取数组最大元素 ‌ void print(); //输出动态数组的所有元素 ‌ int & operator[](int); ‌ CArray & operator=( const CArray &arr); ‌ ‌ ‌

时间: 2023-06-19 22:07:24 浏览: 64
下面是实现了深拷贝构造函数的 CArray 类: ```cpp #include <iostream> #include <algorithm> // for std::max and std::min class CArray { public: // Constructor CArray(int n) : size(n) { vec = new int[size]; } // Copy constructor (deep copy) CArray(const CArray &arr) : size(arr.size) { vec = new int[size]; std::copy(arr.vec, arr.vec + size, vec); } // Destructor ~CArray() { delete[] vec; } // Get the number of elements in the array int length() const { return size; } // Get the i-th element of the array int get(int i) const { return vec[i]; } // Set the i-th element of the array to value void set(int i, int value) { vec[i] = value; } // Get the maximum element in the array int getMax() const { return *std::max_element(vec, vec + size); } // Get the minimum element in the array int getMin() const { return *std::min_element(vec, vec + size); } // Print all elements in the array void print() const { for (int i = 0; i < size; ++i) { std::cout << vec[i] << " "; } std::cout << std::endl; } // Overload the subscript operator [] to access elements in the array int & operator[](int i) { return vec[i]; } // Overload the assignment operator = to perform deep copy CArray & operator=(const CArray &arr) { if (this != &arr) { delete[] vec; size = arr.size; vec = new int[size]; std::copy(arr.vec, arr.vec + size, vec); } return *this; } private: int *vec; // Dynamic array pointer int size; // Size of the dynamic array }; ``` 下面是一个测试例子: ```cpp int main() { // Test constructor CArray arr1(5); for (int i = 0; i < arr1.length(); ++i) { arr1.set(i, i + 1); } arr1.print(); // Output: 1 2 3 4 5 // Test copy constructor CArray arr2(arr1); arr2.print(); // Output: 1 2 3 4 5 // Test operator [] arr2[2] = 10; arr1.print(); // Output: 1 2 3 4 5 arr2.print(); // Output: 1 2 10 4 5 // Test operator = CArray arr3(3); arr3 = arr2; arr3.print(); // Output: 1 2 10 return 0; } ```

相关推荐

[选做]下面是一个数组类CArray的定义。要求: (1)在此基础上增加print()成员函数打印数组, (2)重载“=”、“+”、“-” 运算符使之能对该数组类对象进行赋值、加减运算。 (3)写出主函数对该类进行测试。 class CArray {private: int* p_arr; int size; public: CArray(); //缺省构造函数 CArray(int* p_a,int s); //构造函数 CArray(const CArray &r_other);//复制构造函数 ~CArray();//析构函数 int operator[](int pos) const; //访问数组元素值的下标运算符重载函数 int& operator[](int pos); //设置数组元素值的下标运算符重载函数 CArray &operator=(const CArray &other)//赋值运算符“=”重载函数 CArray operator+(const CArray &other) //加运算符“+”重载函数 CArray operator-(const CArray &other) //减运算符“-”重载函数 void print() const; }; CArray:: CArray() { p_arr=NULL; size=0;} CArray:: CArray(int* p_a,int s) { if(s>0) { size=s; p_arr=new int[size]; for(int i=0;i<size;i++) p_arr[i]=p_a[i]; } Else { p_arr=NULL; size=0; } } CArray::CArray(const CArray &r_other) { size=r_other.size; if(size) { p_arr=new int[size]; for(int i=0;i<size;i++) p_arr[i]=r_other.p_arr[i]; } } CArray::~CArray() { if(p_arr) delete[] p_arr; p_arr=NULL; size=0; } int CArray::operator[](int pos) const { if(pos>=size) return p_arr[size-1]; if(pos<0) return p_arr[0]; return p_arr[pos]; } int& CArray::operator[](int pos) { if(pos>=size) return p_arr[size-1]; if(pos<0) return p_arr[0]; return p_arr[pos]; }

最新推荐

recommend-type

pre_o_1csdn63m9a1bs0e1rr51niuu33e.a

pre_o_1csdn63m9a1bs0e1rr51niuu33e.a
recommend-type

matlab建立计算力学课程的笔记和文件.zip

matlab建立计算力学课程的笔记和文件.zip
recommend-type

FT-Prog-v3.12.38.643-FTD USB 工作模式设定及eprom读写

FT_Prog_v3.12.38.643--FTD USB 工作模式设定及eprom读写
recommend-type

matlab基于RRT和人工势场法混合算法的路径规划.zip

matlab基于RRT和人工势场法混合算法的路径规划.zip
recommend-type

matlab基于matlab的两步定位软件定义接收机的开源GNSS直接位置估计插件模块.zip

matlab基于matlab的两步定位软件定义接收机的开源GNSS直接位置估计插件模块.zip
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

SPDK_NVMF_DISCOVERY_NQN是什么 有什么作用

SPDK_NVMF_DISCOVERY_NQN 是 SPDK (Storage Performance Development Kit) 中用于查询 NVMf (Non-Volatile Memory express over Fabrics) 存储设备名称的协议。NVMf 是一种基于网络的存储协议,可用于连接远程非易失性内存存储器。 SPDK_NVMF_DISCOVERY_NQN 的作用是让存储应用程序能够通过 SPDK 查询 NVMf 存储设备的名称,以便能够访问这些存储设备。通过查询 NVMf 存储设备名称,存储应用程序可以获取必要的信息,例如存储设备的IP地址、端口号、名称等,以便能
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。