数组类 【】 == !=运算符重载


#include“”

#pragma  once

#include<iostream>
using namespace std;

class Array
{
public:
	Array(int length);
	Array(const Array&obj );
	~Array();
public:
	void setData(int index,int valude);
	int getData(int index);
	int length();
public:
	//函数返回至当左值 需要返回一个引用
	int& operator[](int i);//[]操作符重载
	//重载等号操作符
	Array& operator=(Array &a1);
	//重载==号操作符
	bool operator==(Array &a1);
	//重载 !=
	bool operator != (Array &a1);
protected:
	

private:
	int m_length;
	int *m_space;
};


#include“MyArray.cpp”


#include "MyArray.h"




Array::Array(int length)
{
	if (length < 0)
	{
		length = 0;
	}
	m_length =length;
	m_space = new int[m_length];
	
}
//Array a2 = a1;
Array::Array(const Array&obj )
{
	this->m_length = obj.m_length;
	this->m_space = new int [this->m_length];// 分配内存空间
	for (int i=0;i<m_length;i++)//数据元素赋值
	{
		this->m_space[i] = obj.m_space[i];
	}
}
Array::~Array()
{
	if (m_space != NULL)
	{
		delete[] m_space;
		m_length = 0;
	}
}
//a1.setData(i,i);
void Array::setData(int index,int valude)
{
	m_space[index] = valude;
}
int Array::getData(int index)
{
	return m_space[index];
}
int Array::length()
{
	return m_length;
}
int& Array::operator[](int i)
{


	return m_space[i];
}
Array& Array::operator=(Array &a1)
{	//1:释放原来的空间
	if(this->m_space != NULL)
	{
		delete [] m_space;
		m_length = 0;
	}
	//2:根据a1的大小 分配内存空间
	m_length = a1.m_length;
	m_space = new int[a1.m_length];
	//3:copy数据
	for (int i= 0;i<m_length;i++)
	{
		/*m_space[i] = a1.m_space[i];*/
		m_space[i] = a1[i];
	}
	return *this;
}


bool Array::operator==(Array &a1)
{
	if (this->m_length != a1.m_length)
	{
		return false;
	}
	for (int i=0;i<m_length;i++)
	{
			if(this->m_space[i] != a1[i])
			{
				return false;
			}
	}
	return true;
}
bool Array::operator != (Array &a1)
{
	//if (*this == a1)
	//{
	//	return true;
	//}
	//else
	//{
	//	return false;
	//}
	return !(*this == a1);


}

Test_Array2.cpp

#include<iostream>
using namespace std;
#include "MyArray.h"
//类的框架设计设计完毕
//类的测试案例


//重载下标操作符
//重载三个

int main()
{
	Array a1(10);
	
	for (int i=0;i<a1.length();i++)
	{
		a1.setData(i,i);
		//1:需要优化的点
		a1[i] = i;//报错
		//函数返回至当左值 需要返回一个引用
		//a1.operator[i]
	}
	cout<<"输a1: "<<endl;
	for (int i=0;i<a1.length();i++)
	{
		//cout<<a1.getData(i)<<" "<<endl;
		//2:需要优化的点
		cout<<a1[i]<<endl;
	}

	//void operator[](int i)
	//int operator[](int i)
	//int& operator[](int i)
	

	Array a2 = a1;
	cout<<"输a2:"<<endl;
	for (int i=0;i<a1.length();i++)
	{
		cout<<a1.getData(i)<<" "<<endl;
	}
	
	Array a3(5);
	//3:需要优化的地方
	{
		
		a3 = a1;

		a3 = a2 = a1;
		//a3.operator=(a1)
		//Array& operator=(Array &a1)
		cout<<"打印数组a3"<<endl;
		for (int i=0;i<a3.length();i++)//数据元素赋值
		{
			cout<<a3[i]<<" ";
		}
	}

	//4:需要优化的地方
	if (a3 == a1)
	{
		printf("相等\n");
	}
	else
	{
		printf("不相等\n");
	}

	if (a3 != a1)
	{
		printf("不相等\n");
	}
	else
	{
		printf("相等\n");
	}
	/*bool operator != (Array &a1);*/
	//a3.operator!=(a1);
	//a3.operator==(a1)
	//bool operator==(Array &a1);
	
	system("pause");
	return 0;
}


下面是一个示例,演示如何运算符重载一个有序数组: ```c++ #include <iostream> class OrderedArray { private: int* array; int size; public: OrderedArray(int s) : size(s) { array = new int[size]; } ~OrderedArray() { delete[] array; } // 运算符重载:输出有序数组 friend std::ostream& operator<<(std::ostream& os, OrderedArray& obj) { for (int i = 0; i < obj.size; i++) { os << obj.array[i] << " "; } os << std::endl; return os; } // 运算符重载:比较两个有序数组是否相等 bool operator==(const OrderedArray& rhs) const { if (size != rhs.size) { return false; } for (int i = 0; i < size; i++) { if (array[i] != rhs.array[i]) { return false; } } return true; } // 运算符重载:将两个有序数组合并成一个有序数组 OrderedArray operator+(const OrderedArray& rhs) const { int newSize = size + rhs.size; int* newArray = new int[newSize]; int i = 0, j = 0, k = 0; while (i < size && j < rhs.size) { if (array[i] <= rhs.array[j]) { newArray[k++] = array[i++]; } else { newArray[k++] = rhs.array[j++]; } } while (i < size) { newArray[k++] = array[i++]; } while (j < rhs.size) { newArray[k++] = rhs.array[j++]; } OrderedArray result(newSize); result.array = newArray; return result; } }; int main() { OrderedArray arr1(5); arr1[0] = 3; arr1[1] = 5; arr1[2] = 7; arr1[3] = 9; arr1[4] = 11; OrderedArray arr2(5); arr2[0] = 2; arr2[1] = 4; arr2[2] = 6; arr2[3] = 8; arr2[4] = 10; OrderedArray arr3 = arr1 + arr2; std::cout << arr3; if (arr1 == arr2) { std::cout << "arr1 equals arr2" << std::endl; } else { std::cout << "arr1 does not equal arr2" << std::endl; } if (arr1 == arr1) { std::cout << "arr1 equals itself" << std::endl; } else { std::cout << "arr1 does not equal itself" << std::endl; } return 0; } ``` 在此示例中,我们定义了一个有序数组`OrderedArray`,其中包含一个`array`指针,指向一个整数数组,以及一个`size`变量,表示数组的大小。我们定义了三个运算符重载: - `operator<<`:输出有序数组。这个运算符使用`friend`关键字定义,以便可以访问`OrderedArray`的私有成员。它遍历整个数组,并将每个元素输出到`std::ostream`对象中。 - `operator==`:比较两个有序数组是否相等。这个运算符采用常量引用作为参数,以避免对参数进行更改。它比较两个数组的大小和元素,并返回一个布尔值,表示它们是否相等。 - `operator+`:将两个有序数组合并成一个有序数组。这个运算符返回一个新的`OrderedArray`对象,它包含两个原始数组的所有元素,并按升序排序。 在`main()`函数中,我们创建了两个有序数组,并将它们相加,生成一个新的有序数组。我们还比较了两个有序数组是否相等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值