C++ 运算符重载四(自定义数组类)
2016-06-28 21:29
337 查看
//自定义数组类 #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++实现,作者是Sarah Thompson,该实现只有一个头文件sigslot.h,跨平台且线程安全
- c语言之IO使用文件分割
- c++后台开发电面
- C++拷贝构造
- 跳台阶(斐波那契数列)
- C/C++中的类型转换
- 图片处理(三)之高斯平滑
- c++中抽象类与接口的区别
- 华为机试题—在字符串中找出连续最长的数字串 c++
- C++11 随机数
- 关于python与c++效率的对比实战
- c语言swap(a,b)值交换的4种实现方法
- Qt编译时MinGW去掉对gcc动态库的依赖(去掉对libgcc_s_dw2-1.dll,libstdc++-6.dll的依赖)
- c++ 上机实验题
- c语言之LogToFile
- OpenWrt C/C++ Development with Eclipse(Eclipse下的Openwrt开发)
- C++ 类的复制控制
- string 和const char*和char*之间的转换
- VC++2010读取BIN文件
- 深入理解C++虚函数