文章概述
本篇文章主要是通过两个经典案例熟悉运算符重载以及自己实现数组类;
初始化的时候可以用NULL,但是赋值的时候不可以的。
实现数组类
需求: a.能够设置数组的元素 b. 用一个对象初始化另一个对象 c.获取元素
//a.能够设置数组的元素 b. 用一个对象初始化另一个对象 c.获取元素
class Array
{
private:
//表示的数组的首地址
int* p;
//表示数组最大存放元素的数量
int length;
public:
Array(int length)
{
if (length<0)
{
length = 0;
}
this->length = length;
p = new int[this->length];
}
//a.能够设置数组的元素
void setData(int index,int data)
{
p[index] = data;
}
//c.获取元素
int getData(int index)
{
return p[index];
}
// b.用一个对象初始化另一个对象(由于存在指针变量所以用深拷贝)
Array(const Array& obj)
{
this->length = obj.length;
p = new int[this->length];
for (int i=0;i<this->length;i++)
{
p[i] = obj.p[i];
}
}
//获得数组元素的长度
int GetLength()
{
return this->length;
}
~Array()
{
if (p != NULL)
{
delete[]p;
}
this->length = 0;
}
};
int main()
{
Array arr(10);
//设置元素
for (int i=0;i<arr.GetLength();i++)
{
arr.setData(i,i);
}
//输出元素
for (int i=0;i<arr.GetLength();i++)
{
cout << arr.getData(i) << endl;
}
cout << "使用arr初始化brr" << endl;
//使用arr初始化brr
Array brr = arr;
for (int i = 0; i<brr.GetLength(); i++)
{
cout << brr.getData(i) << endl;
}
return 0;
}
对于数组Array重载运算符
需求: a. [] —->arr[0]=5; b.== !=; c.cout<
//a. []---->arr[0]=5; b.== !=; c.cout<<arr[0]<<endl; d.<< >>
class Array
{
//最好将std中的参数放在前面
friend ostream& operator<<(ostream& out, Array& obj);
friend istream& operator>>(istream& in, Array& obj);
private:
//表示的数组的首地址
int* p;
//表示数组最大存放元素的数量
int length;
public:
Array(int length)
{
if (length<0)
{
length = 0;
}
this->length = length;
p = new int[this->length];
}
//a.能够设置数组的元素
void setData(int index,int data)
{
p[index] = data;
}
//c.获取元素