c++学习笔记(十):运算符重载综合——自定义数组类

通过几天的对运算符重载的学习,准备自定义一个数组类,并对一些运算符进行重载,话不多说上代码。

定义文件Array.h:

#ifndef _ARRAY_H_
#define _ARRAY_H_
class Array
{
private:
    int mLength;
    int* mSpace;

public:
    Array(int length);
    Array(const Array& obj);
    int length();
    void setData(int index, int value);
    int getData(int index);
    ~Array();

public:
	int& operator[](int i);
	Array& operator=(Array &a1);
	bool operator==(Array &a2);
	bool operator!=(Array &a2);
};

//对符号[] = == !=进行重载

#endif

业务实现文件Array.cpp:



#include <iostream>
#include "Array.h"
using namespace std;


Array::Array(int length)
{
    if( length < 0 )
    {
        length = 0;
    }
    
    mLength = length;
    mSpace = new int[mLength];
}

Array::Array(const Array& obj)
{
    mLength = obj.mLength;
    
    mSpace = new int[mLength];
    
    for(int i=0; i<mLength; i++)
    {
        mSpace[i] = obj.mSpace[i];
    }
}

int Array::length()
{
    return mLength;
}

void Array::setData(int index, int value)
{
    mSpace[index] = value;
}

int Array::getData(int index)
{
    return mSpace[index];
}

Array::~Array()
{
    mLength = -1;
    delete[] mSpace;
}


//以下是运算符重载函数 
//从数组里面拿元素
int& Array::operator[](int i)
{
	return mSpace[i];
}

/*
//功能2
Array a3(20);
a3 = a1;
*/
Array& Array::operator=(Array &a1)
{
	int i = 0;

	if (this->mSpace != NULL)
	{
		delete[] mSpace;
		this->mLength = 0;
	}
	//a1的所有元素赋给a3
	this->mLength = a1.mLength;
	this->mSpace = new int[a1.mLength];

	for (i=0; i<this->mLength; i++)
	{
		mSpace[i] = a1[i];
	}

	return *this;
}

//功能3
//if (a1 == a2)  //功能3

bool Array::operator==(Array &a2)
{
	if (this->mLength != a2.mLength)
	{
		return false;
	}
	for (int i=0; i<this->mLength; i++)
	{
		if (this->mSpace[i] != a2[i])
		{
			return false;
		}
	}
	return true;
}

//	if (a1 != a2) //功能4
bool Array::operator!=(Array &a2)
{
	return !(*this == a2);
}



测试代码:

int Test()
{
    Array a1(10);
    
    for(int i=0; i<a1.length(); i++)
    {
			a1[i] = i;//a1.operator [](i) = i;
		
    }
    
    for(int i=0; i<a1.length(); i++)
    {
    
		printf("array %d: %d\n", i, a1[i]);  //功能1
    }
    
    Array a2 = a1;
    
    for(int i=0; i<a2.length(); i++)
    {
		printf("array %d: %d\n", i, a2[i]);
    }

	//功能2
	Array a3(20);
	a2 = a3 = a1;  //a3.operator=(a1);
	
	
	//a1.operator==(a2);
	if (a1 == a2)  //功能3
	{
		printf("相等\n");
	}
	else
	{
		printf("不相等\n");
	}
	
	if (a1 != a2) //功能4
	{
		printf("不相等\n");
	}
	else
	{
		printf("相等\n");
	}
}


注意:正确运用引用当运算符重载的返回值及参数,前面已讲。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值