/*
1.数组类的实现中有内置的自我意识首先它知道自己的大小
2.数组类支持数组之间的赋值以及两个数组之间的相等和不相等的比较操作
3.数组类应该支持对其所含的值进行下列查询操作数组中最小值是什么最大值是什
么某个特殊的值是否在数组中如果存在它占的第一个位置的索引是什么
4.数组类支持自排序为了便于讨论假定存在一群用户他们认为数组支持排序的功
能很重要而另外一些人对此却不以为然
除了支持数组操作还必须支持数组本身的机制包括
5.能够指定长度以此来创建数组这个值无需在编译时刻知道
6.能够用一组值初始化数组
7.能够通过一个索引来访问数组中的单个元素为便于讨论假设用户强烈要求用数组
下标操作符来实现这项功能
8.能够截获并指出错误的索引值假设我们认为这很有必要所以没有询问用户的想法
我们认为这是一个设计良好的数组所必须实现的
*/
#include<iostream>
#include<string>
using namespace std;
//构建数组类IntArray
class IntArray
{
private:
int *ia;
int _size;
public:
IntArray(int sz)
{
_size=sz;
ia=new int[_size];
for(int n=0;n<_size;n++)
{
ia[n]=0;
}
}
// 深拷贝
IntArray(const IntArray &c)
{
_size=c._size;
ia=new int[_size];
for(int i=0;i<c._size;i++)
{
ia[i]=c.ia[i];
}
}
~IntArray()
{
delete [] ia;
}
bool operator==( const IntArray& ) const;
bool operator!=( const IntArray& ) const;
// 赋值操作符 #2a
IntArray & operator=( const IntArray& );
//int size() const; // #1
//void sort(); // #4
//int min() const; // #3a
//int max() const; // #3b
// 如值在数组中找到
// 返回第一次出现的索引
// 否则返回-1
int find( int value ) const; // #3c
int operator [](int i);
void set();
};
//‘[]’的重载,用于输出数组元素
int IntArray::operator [](int i)
{
return this->ia[i];
}
//用于向数组中硬性赋值
void IntArray::set()
{
int num=0;
for(int p=0;p<this->_size;p++)
{
cout<<"请输入数据"<<endl;
cin>>num;
this->ia[p]=num;
}
}
//‘==’的重载 两个数组对象相等
bool IntArray::operator==(const IntArray &c)const
{
for(int k=0;k<this->_size;k++)
{
if(this->ia[k]!=c.ia[k])
{
return false;
}
}
return true;
}
//‘!=’两个数组对象不等
bool IntArray::operator!=(const IntArray &c)const
{
for(int m=0;m<this->_size;m++)
{
if(this->ia[m]!=c.ia[m])
return true;
break;
}
return false;
}
//'='赋值符的重载,用于数组间的赋值
IntArray & IntArray::operator=(const IntArray &c)
{
for(int j=0;j<this->_size;j++)
{
this->ia[j]=c.ia[j];
}
return *this;
}
//找出函数参数所指位置的数
int IntArray::find(int value)const
{
return this->ia[value];
}
void main()
{
IntArray array1(10);//构造函数设定初值,其实也属于硬性赋值
IntArray array2(10);
array1.set();//开始对两个整形数组硬性赋值
array2.set();
if(array1==array2)
{
cout<<"两数组相等"<<endl;
}
else
{
cout<<"两数组不相等"<<endl;
}
cout<<"数组元素的值:"<<array1.find(3)<<endl;
array1=array2;//数组之间赋值,正常的数组间是不可以相互赋值的,但是‘=’进行了重载,效果就不同了
for(int q=0;q<10;q++)
{
cout<<array1[q]<<endl;//这里,对[]的重载起了作用,其能将赋值后的数组输出
}
}