#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);  // 构造数组,大小为 nfor(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;
}

  

转载于:https://www.cnblogs.com/cstdio1/p/11080172.html

实现数组类(C++ 拷贝构造函数、拷贝函数)要判断赋值左右对象不相等,坑惨了...相关推荐

  1. 二说 拷贝构造函数 拷贝赋值函数

    文章目录 什么是拷贝构造函数 拷贝构造函数的调用时机 2.1 当函数的参数为类的对象时 2.2 函数的返回值是类的对象 2.3 对象需要通过另外一个对象进行初始化 浅拷贝与深拷贝 3.1 默认拷贝构造 ...

  2. 什么是拷贝构造函数?拷贝构造函数何时被调用

    1.什么是拷贝构造函数: CA(const CA& C)就是我们自定义的拷贝构造函数.可见,拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它的唯一的一个参数是本类型的一个引用变 ...

  3. 详解拷贝构造函数拷贝赋值运算符

    参考书籍: c++ primer 5 拷贝构造函数 定义 如果一个构造函数的第一个参数是自身类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数. 何时发生拷贝初始化(即,调用拷贝构造函数 ...

  4. C++编程思想 第1卷 第11章 引用和拷贝构造函数 拷贝构造函数 拷贝构造函数

    编译器对如何从现有的对象产生新的对象进行了假定. 当通过按值传递的方式传递一个对象时,就创立了一个新对象,函数体内的 对象是由函数体外的原来存在的对象传递的 编译器假定我们想使用位拷贝来创建对象 每当 ...

  5. js 数组移除指定元素【函数封装】(含对象数组移除指定元素)

    普通数组移除指定元素 // 普通数组移除指定元素 function removeItem(arr, item) {let targetIndex = arr.findIndex((itemTemp) ...

  6. python all()函数 (判断可迭代对象中是否全为True)

    system\python_stubs\1205152947\builtins.py def all(*args, **kwargs): # real signature unknown"& ...

  7. 在angular中,我有一个路由'/sdfsd/sss/ss',实现在一函数,判断路由配置对象中是否存在该路由...

    在 Angular 中,你可以使用 ActivatedRoute 服务来获取当前路由的配置信息.你可以注入 ActivatedRoute 服务,然后使用其中的 snapshot 属性来获取路由配置对象 ...

  8. 3-4:类与对象中篇——默认成员函数之拷贝构造函数

    文章目录 (1)拷贝构造函数的概念 (2)拷贝构造函数的注意事项 (1)拷贝构造函数的概念 拷贝构造函数:用于创建一个与原对象一模一样的对象,也即拷贝构造函数=拷贝+构造函数.拷贝构造函数只有一个形参 ...

  9. C++ 笔记(17)— 类和对象(构造函数、析构函数、拷贝构造函数)

    1. 构造函数 构造函数是一种特殊的函数(方法),在根据类创建对象时被调用.构造函数是一种随着对象创建而自动被调用的函数,它的主要用途是为对象作初始化. 构造函数的名称与类的名称是完全相同的,并且不会 ...

最新文章

  1. python编程函数_python编程中函数和参数你必须知道的
  2. python1000个常用代码-30个Python常用极简代码,拿走就用
  3. 编译器错误信息: CS1595: 已在多处定义“ ”;一种可能出现的情况
  4. electron ipcRenderer渲染进程发送事件, ipcMain主进程监听事件
  5. 将表单请求提交到本页
  6. Linux编程(2)_软件的安装和卸载
  7. w讠ndows的中文读音,广西壮族自治区
  8. 产品经理应具备的能力(初中高级),产品经理岗位细分
  9. 简单聊聊离散数学是什么
  10. php 汉字转拼音 [包含20902个基本汉字+5059生僻字]
  11. 关于GEOS库配置与安装
  12. PPT幻灯片放映时不显示视频(旁白)
  13. SpringBoot整合Redis(十九)
  14. 热噪声 Thermal noise
  15. python泰勒展开式求sin_泰勒展开式利用python数值方法证明
  16. java雷霆战机源代码_java spring雷霆战机(小游戏源码)
  17. ceph课程(一)ceph组件与原理
  18. unity 音频可视化方案
  19. LLJ-F(S)系列漏电继电器
  20. 第二届中国PWA开发者日

热门文章

  1. 给Repeater、Datalist和Datagrid增加自动编号列
  2. UA MATH571B 试验设计 2k析因设计理论上
  3. UA MATH636 信息论1 熵
  4. C# 使用new 关键字显式隐藏从基类继承的成员和内部类的使用
  5. VC++ 鼠标非显示区域命中测试消息WM_NCHITTEST和相关编程问题学习1
  6. VC++ 定时器基本使用
  7. generator (1)
  8. 学习笔记92—python 画横竖分界线
  9. es6 name属性
  10. StringBuilder StringBuffer