实现数组类(C++ 拷贝构造函数拷贝函数)要判断赋值左右对象不相等,坑惨了
Posted cstdio1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实现数组类(C++ 拷贝构造函数拷贝函数)要判断赋值左右对象不相等,坑惨了相关的知识,希望对你有一定的参考价值。
#include <iostream> using namespace std; class ArrayIndexOutOfBoundsException // 异常类 public: int index; ArrayIndexOutOfBoundsException(int k) index = k; ; class Array private: int *data; int size; static const int dSize = 10; // 数组默认大小 public: Array( ) // 无参构造 size = dSize; data = new int[size]( ); Array(int n ) // 有参构造 size = n; data = new int[size]( ); Array(const Array& arr)//拷贝构造函数,深拷贝 if(arr.size>0) size = arr.size; data = new int[size]( ); for (int i = 0; i < size; i++) data[i] = arr.data[i]; Array& operator = (const Array& arr) if(this!=&arr)//如果等号右侧的对象和左边的不是一个对象再赋值(没有这句会运行error),要判断赋值左右对象不相等,坑惨了 delete []data;//先释放掉之前的内存,否则会内存超限 size = arr.size; data = new int[size]( ); for (int i = 0; i < size; i++) this->data[i] = arr.data[i]; return *this; ~Array() if (this->data != NULL)//不为空才释放 delete []data; int& operator [] (int k) // 运算符 [ ] 重载,以方便数组的使用 if(k<0 || k>=size) throw ArrayIndexOutOfBoundsException(k); return data[k]; friend ostream& operator << (ostream& o, const Array& a); // 运算符 << 重载,以方便输出 ; ostream& operator << (ostream& o, const Array& a) o << ‘[‘ ; for(int i=0; i<a.size-1; i++) o << a.data[i] << ‘,‘ ; o << a.data[a.size-1] << ‘]‘; return o; // 注意:实际测试程序中,在此处之前的代码与样例中相同 // 注意:实际测试程序中,在此处之后的代码(即main函数)可能与样例中不同 int main() int n, k; cin >> n >> k; Array a(n); // 构造数组,大小为 n for(int i=0; i<n; i++) a[i] = i; Array b = a; // 拷贝构造数组 b[n/2] = k; cout << a << endl; cout << b << endl; Array c; // 构造数组,默认大小 c = a; // 拷贝数组 c[n/2] = k; cout << a << endl; cout << c << endl; a = a; a[n/2] = 2223; cout << a << endl; return 0;
以上是关于实现数组类(C++ 拷贝构造函数拷贝函数)要判断赋值左右对象不相等,坑惨了的主要内容,如果未能解决你的问题,请参考以下文章