您的位置:首页 > 编程语言 > C语言/C++

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");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: