世界,您好!

#include <iostream>
using namespace std;
int g_ret = -1000;
class Array
{
public:
	Array(int size) :_size(size)
	{
		m_data = new int[size];
	}
	
	~Array()
	{
		delete []m_data;
		m_data = NULL;
	}
	
	Array (const Array& other) //拷贝构造函数
	{
		this->_size = other._size;
		this->m_data = new int[other._size];
		
		memcpy(this->m_data,other.m_data,other._size*sizeof(int));
	}
	Array& operator = (const Array& o) //复制运算符重载
	{
		if(o == *this) //先判断一下是否一样,要是一样的话 就不用赋值了
			return *this;
		else
		{
			delete []this->m_data;
			this->_size = o._size;
			this->m_data = o.m_data;
			memcpy(this->m_data,o.m_data,o._size*sizeof(int));
			return *this;
		}
	}
	
	int & operator[] (int index)
	{
		if(this->_size > index && index >= 0)
		{
			return this->m_data[index];
		}else{
			cout<<"error"<<endl;
			return g_ret;
		}
	}
	
	friend bool operator != (const Array&a1,const Array& a2);
	friend bool operator == (const Array&a1,const Array& a2);
	
	friend istream& operator >>(istream& in, Array& arr);
	friend ostream& operator <<(ostream& out,const Array& arr);
private:
    int _size;
    int *m_data;
};

bool operator == (const Array&a1, const Array& a2)
{
	if(a1._size == a2._size) //先判断一下要赋值的两个是否相同
	{
		for(int i=0; i<a1._size; i++)
		{
			if(a1.m_data[i] != a2.m_data[i])
		//判断一下 两个类的 m_data 成员是否相同
				return false;
		}
		return true;
	}
	else
		return true;
} 
bool operator != (const Array &a1,const Array & a2)
{
	return !(a1 == a2);
}

istream& operator >>(istream& in, Array& arr)
{
	for(int i=0; i< arr._size; ++i)
	{
		in>>arr[i];
	}
	return in;
}
ostream& operator <<(ostream& out,const Array& arr)
{
	for(int i = 0; i < arr._size; ++i)
	{
		out<<arr.m_data[i]<<" ";
	}
	out<<endl;
	return out;
}

int main()
{
	Array a(5);
	cin>>a;
	cout<<a;
	return 0;
}

 

庄朋龙
庄朋龙

一个爱生活的技术菜鸟

4 评论

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注