//自定义数组类
#include<iostream>
using namespace std;//分析:能获取数组长度,添加元素,删除元素,修改元素
//要求重载[],=,==,!=运算符class MyArray
{
private:int mLength;int* mSpace;public:MyArray(int length){cout << "有参构造函数被调用了1" << endl;mLength = length;mSpace = new int[mLength];memset(mSpace, 0, sizeof(int)*mLength);}MyArray(const MyArray& obj){cout << "拷贝构造函数被调用了2" << endl;mLength = obj.mLength;mSpace = new int[mLength];int i = 0;for (i = 0; i < mLength; i++){mSpace[i] = obj.mSpace[i];}}int length(){return mLength;}void setData(int index, int value){if (index>(mLength-1)){cout << "数组越界!" << endl;return;}mSpace[index] = value;}int getData(int index){if (index>(mLength - 1)){cout << "数组越界!" << endl;return 0;}return mSpace[index];}void PrintfA(){for (int i = 0; i < mLength; i++){cout << "第"<<i<<"个元素是" << mSpace[i] << endl;}}~MyArray(){cout << "析构函数被调用了3" << endl;if (mSpace!=NULL){delete[] mSpace;}mLength = 0;}
public://[]操作符重载int & operator[](int num){if (num>(mLength-1)){cout << "数组越界!" << endl;return mSpace[mLength - 1];}return mSpace[num];}//=操作符重载MyArray & operator=(MyArray &obj){mLength = obj.mLength;if (mSpace==NULL){mSpace = new int[mLength];}else{//释放原来的数组内存delete[] mSpace;mSpace = new int[mLength];}int i = 0;for (i = 0; i < mLength; i++){mSpace[i] = obj.mSpace[i];}return *this;}//==操作符重载bool operator==(MyArray &myarr){bool flag = true;if (mLength != myarr.mLength){flag = false;return flag;}for (int i = 0; i < mLength; i++){if (mSpace[i] != myarr.mSpace[i]){flag = false;break;}}return flag;}//!=操作符重载bool operator!=(MyArray &myarr){bool flag = false;if (mLength == myarr.mLength){for (int i = 0; i < mLength; i++){if (mSpace[i] != myarr.mSpace[i]){flag = true;break;}}}else{flag = true;}return flag;}};void ProtectA(){MyArray arr(10);arr.PrintfA();//arr[10];  arr[10]=2;//根据需求推理出参数列表是Int  返回值是int &//int & arr.operator[](int num)arr[5]=5;arr.PrintfA();//arr1=arr;  赋值操作//分析可知:函数名operator=()  ;操作数 2个(不涉及系统类库)arr.operator=(MyArray &arr1) //因为存在 arr1=arr2=arr3; 所以返回值MyArray & ;结果:MyArray & operator=(MyArray &arr1) MyArray arr2(5);arr2[0] = 1;arr2[2] = 1;arr2[3] = 1;arr2[4] = 1;arr2[1] = 1;arr = arr2;arr.PrintfA();}void ProtectB(){//arr1==arr;  判断是否相等//分析 :函数名 operator==(), 有2个操作数  arr1.operator==(arr)  返回值:判断是否相等 那么肯定返回bool值//结果:bool operator==(MyArray &myarr)MyArray arr1(3), arr2(5);if (arr1 == arr2){cout << "这两个数组相等" << endl;}else{cout << "这两个数组不相等" << endl;}if (arr1 != arr2){cout << "这两个数不组相等" << endl;}else{cout << "这两个数组相等" << endl;}
}void main(){ProtectB();system("pause");
}

C++ 运算符重载四(自定义数组类)相关推荐

  1. 在python中定义类时、运算符重载_自定义 Python 类中的运算符和函数重载(上)...

    如果你对 Python 中的str对象使用过 + 或 * 运算符,你一定注意到了它的操作与 int 或 float 类型的区别: 你可能想知道同一内置运算符或函数如何对不同类对象进行不同操作的.这分别 ...

  2. C++运算符重载典型习题---复数类 String类 分数类

    一.复数类(Complex class) complex.cpp: /***************************************************** copyright ( ...

  3. 在python中定义类时、运算符重载_python自定义类运算符重载

    假设我有一个班级: class Cat: def __init__(self, name = "default", age = 0): self.name = name self. ...

  4. C++实现:自定义数组类型实现相关运算符重载

    运算符重载说明 这次我们通过来自定义数组类型重载[].<<.>>.==.!=运算符来学习C++运算符重载相关知识. C++的运算符重载是C++相对于其他编程语言的一大特色. 在 ...

  5. python全栈高级_Python全栈工程师(异常(高级)、运算符重载)

    ParisGabriel 每天坚持手写  一天一篇  决定坚持几年 为了梦想为了信仰  开局一张图 Python人工智能从入门到精通 对象的属性管理函数: getattr(obj, name[,def ...

  6. C++:运算符重载与类的赋值运算符重载函数

    目录 章节知识架构 一.运算符重载 1. 运算符重载的基本概念 代码段1 2.关于运算符重载的重要语法细则 二.运算符重载在类中的使用 三.类的默认成员函数:=重载函数(赋值运算符重载) 1.自定义= ...

  7. 【C++】C++类的学习(三)——运算符重载与友元函数

    [fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 前言 前面的两篇博文中介绍了类的一些基本特性,今天讲一讲运算符重载和友元. 运算符重载 运算 ...

  8. C++实现日期类(运算符重载)

    日期类的实现 经历前期C语言的学习,C语言的编程思路是面向过程的编程,将所需要实现的功能封装为每一个功能函数,在主函数中进行调用 C++编程思想是面向对象的编程,相比较于C语言的编程,它更具有更高的安 ...

  9. 用Python重载运算符方法实现的复数类

    最近开始学习了一下Python,发现其有些特性还是挺诱人的,比如运算符可以重载.对于我这样习惯用C++的老农来说,Java这样不能重载运算符的OOP语言实在是感觉存在有些遗憾.而能支持重载运算符可以使 ...

  10. C++ 学习 ::【基础篇:17】:C++ 类与对象:运算符重载介绍、运算符重载函数(类内与类外区别)写法及简单设计实现

    本系列 C++ 相关文章 仅为笔者学习笔记记录,用自己的理解记录学习!C++ 学习系列将分为三个阶段:基础篇.STL 篇.高阶数据结构与算法篇,相关重点内容如下: 基础篇:类与对象(涉及C++的三大特 ...

最新文章

  1. Python学习之路:内置函数
  2. Firefox火狐浏览器自用技巧汇总--以备使用--13.5.16
  3. 怎么用python画心_python怎么画心Python的类实例属性访问规则
  4. Android—常用组件练习
  5. php5.6 pdo.dll 没有,php5.6没有pdo怎么办
  6. android e图标一会有一会没有反应,android解决菜单Menu添加Icon无效问题,让菜单同时显示图标和文字...
  7. (123)FPGA面试题-介绍低速接口(UART、IIC、SPI),SPI有几根线,每根线的作用?(三)
  8. 管理动物园动物c++_中国动物园行业供需预测及投资潜力分析
  9. SOA面向服务架构简述
  10. numpy教程:排序、搜索和计数
  11. mysql5.7卸载服务_win10卸载原mysql安装64位mysql5.7并修改root密码
  12. 一个简单的三层架构之仓库管理系统的入库出库
  13. →箭头符号大全复制_特殊符号大全8908194
  14. python_csv文件写入
  15. 做跨境电商一年买了房: 未来五年的风口行业,90%的人都不知道 !
  16. ps软件打不开计算机受限制,w10打不开ps怎么解决
  17. Cesium 实现粒子效果贴地(伪)
  18. 苹果id登录_英雄联盟手游是用苹果ID好还是拳头好 账号选择建议
  19. 苹果手机小圆圈怎么设置_敬业签苹果手机版软件小账本怎么设置密码?
  20. FTP笔记-FTP主动模式和被动模式

热门文章

  1. imagej软件测量鼠脑切片的梗塞区域面积
  2. 智能优化算法:探路者优化算法-附代码
  3. 【GIS导论】实验五 缓冲区分析和网络分析
  4. r语言TeachingDemos包绘制黑白脸谱图
  5. ENVI FLAASH大气校正常见错误及解决方法(转载)
  6. Android利用手机拍照和从相册读取照片的方法
  7. ae制h5文字动画_利用AE表达式制作文字弹跳动画
  8. 十分钟走进大数据世界
  9. 因为一个YYYY-MM-dd的Bug,我被老板骂的狗血淋头!
  10. 外包征集令:一个Android TV酒店项目