实现数组类(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); // 构造数组,大小为 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++ 拷贝构造函数、拷贝函数)要判断赋值左右对象不相等,坑惨了...相关推荐
- 二说 拷贝构造函数 拷贝赋值函数
文章目录 什么是拷贝构造函数 拷贝构造函数的调用时机 2.1 当函数的参数为类的对象时 2.2 函数的返回值是类的对象 2.3 对象需要通过另外一个对象进行初始化 浅拷贝与深拷贝 3.1 默认拷贝构造 ...
- 什么是拷贝构造函数?拷贝构造函数何时被调用
1.什么是拷贝构造函数: CA(const CA& C)就是我们自定义的拷贝构造函数.可见,拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它的唯一的一个参数是本类型的一个引用变 ...
- 详解拷贝构造函数拷贝赋值运算符
参考书籍: c++ primer 5 拷贝构造函数 定义 如果一个构造函数的第一个参数是自身类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数. 何时发生拷贝初始化(即,调用拷贝构造函数 ...
- C++编程思想 第1卷 第11章 引用和拷贝构造函数 拷贝构造函数 拷贝构造函数
编译器对如何从现有的对象产生新的对象进行了假定. 当通过按值传递的方式传递一个对象时,就创立了一个新对象,函数体内的 对象是由函数体外的原来存在的对象传递的 编译器假定我们想使用位拷贝来创建对象 每当 ...
- js 数组移除指定元素【函数封装】(含对象数组移除指定元素)
普通数组移除指定元素 // 普通数组移除指定元素 function removeItem(arr, item) {let targetIndex = arr.findIndex((itemTemp) ...
- python all()函数 (判断可迭代对象中是否全为True)
system\python_stubs\1205152947\builtins.py def all(*args, **kwargs): # real signature unknown"& ...
- 在angular中,我有一个路由'/sdfsd/sss/ss',实现在一函数,判断路由配置对象中是否存在该路由...
在 Angular 中,你可以使用 ActivatedRoute 服务来获取当前路由的配置信息.你可以注入 ActivatedRoute 服务,然后使用其中的 snapshot 属性来获取路由配置对象 ...
- 3-4:类与对象中篇——默认成员函数之拷贝构造函数
文章目录 (1)拷贝构造函数的概念 (2)拷贝构造函数的注意事项 (1)拷贝构造函数的概念 拷贝构造函数:用于创建一个与原对象一模一样的对象,也即拷贝构造函数=拷贝+构造函数.拷贝构造函数只有一个形参 ...
- C++ 笔记(17)— 类和对象(构造函数、析构函数、拷贝构造函数)
1. 构造函数 构造函数是一种特殊的函数(方法),在根据类创建对象时被调用.构造函数是一种随着对象创建而自动被调用的函数,它的主要用途是为对象作初始化. 构造函数的名称与类的名称是完全相同的,并且不会 ...
最新文章
- python编程函数_python编程中函数和参数你必须知道的
- python1000个常用代码-30个Python常用极简代码,拿走就用
- 编译器错误信息: CS1595: 已在多处定义“ ”;一种可能出现的情况
- electron ipcRenderer渲染进程发送事件, ipcMain主进程监听事件
- 将表单请求提交到本页
- Linux编程(2)_软件的安装和卸载
- w讠ndows的中文读音,广西壮族自治区
- 产品经理应具备的能力(初中高级),产品经理岗位细分
- 简单聊聊离散数学是什么
- php 汉字转拼音 [包含20902个基本汉字+5059生僻字]
- 关于GEOS库配置与安装
- PPT幻灯片放映时不显示视频(旁白)
- SpringBoot整合Redis(十九)
- 热噪声 Thermal noise
- python泰勒展开式求sin_泰勒展开式利用python数值方法证明
- java雷霆战机源代码_java spring雷霆战机(小游戏源码)
- ceph课程(一)ceph组件与原理
- unity 音频可视化方案
- LLJ-F(S)系列漏电继电器
- 第二届中国PWA开发者日