TestArray.cpp(主函数)
#include "iostream"
using namespace std;
#include "MyArray.h"
/*
完成重载
1:重载[]
2:重载=
3:重载==
4:重载!=
*/
void main()
{
MyArray a1(6);
/*
for (int i = 0; i < a1.length(); i++)
{
a1.setData(i, i);
}*/
cout << "打印a1 :" << endl;
/*
for (int i = 0; i < a1.length(); i++)
{
cout << a1.getData(i) << endl;
}*/
MyArray a2(6);
/*
1: 重载[] 场景
a1[i] = i ;// a1.setData(i, i);
*/
for (int i = 0; i < a1.length(); i++)
{
cout << a1[i] << endl;
}
/*
2: 重载= 场景
MyArray a1(6);
MyArray a3(3);
a3 = a1;
a3 = a2 = a1;
*/
MyArray a3(3);
/*a3 = a1;
cout << "打印a3: " << endl;
for (int i = 0; i < a3.length(); i++)
{
cout << a3[i] << endl;
}*/
a3 = a2 = a1;
cout << "打印a2: " << endl;
for (int i = 0; i < a2.length(); i++)
{
cout << a2[i] << endl;
}
cout << "打印a3: " << endl;
for (int i = 0; i < a3.length(); i++)
{
cout << a3[i] << endl;
}
/*
3:重载== 场景
if(a3 == a1) 输出相等,否则输出不相等
*/
if (a3 == a1)
{
cout << "a3和a1相等!" << endl;
}
else
{
cout << "a3和a1不相等!" << endl;
}
/*
4:重载!= 场景
if(a3 != a1) 输出不相等,否则输出相等
*/
if (a3 != a1)
{
cout << "a3和a1不相等!" << endl;
}
else
{
cout << "a3和a1相等!" << endl;
}
}
MyArray.h
#pragma once
class MyArray
{
public:
MyArray(int length);
MyArray(const MyArray & obj);
~MyArray();
public:
void setData(int index, int value);
int getData(int index);
int length();
private:
int m_length;
int * m_p;
public:
//1:重载[] a1[i] = i
int operator[] (int i);
//2:重载= a3 = a2 = a1
MyArray & operator=(MyArray & a1);
//3:重载 == (a3 == a1)
bool MyArray::operator==(MyArray & a1);
//4:重载!= (a3 != a1)
bool MyArray::operator!=(MyArray & a1);
};
MyArray.cpp
#include "MyArray.h"
using namespace std;
//MyArray a1(6)
MyArray::MyArray(int length)
{
if (length < 0)
{
m_length = 0;
}
m_length = length;
m_p = new int[m_length];
}
//MyArray a2 = a1
MyArray::MyArray(const MyArray & obj)
{
this->m_length = obj.m_length;
m_p = new int[m_length];
for (int i = 0; i < m_length; i++)
{
this->m_p[i] = obj.m_p[i];
}
}
MyArray::~MyArray()
{
if ( m_p != nullptr )
{
delete[] m_p;
m_length = 0;
}
}
//a1.setData(i, i);
void MyArray::setData(int index, int value)
{
m_p[index] = value;
}
int MyArray::getData(int index)
{
return m_p[index];
}
int MyArray::length()
{
return m_length;
}
//1:重载[] a1[i] = i
int MyArray::operator[] (int i)
{
this->m_p[i] = i;
return m_p[i];
}
//2:重载= a3 = a2 =a1
//如果是a3 = a2 ,void即可,如果是a3 = a2 =a1,从右向左结合,不能是a3 = void,所以要返回本身,即返回引用。
MyArray& MyArray::operator=(MyArray & a1)
{
//1:释放原来的内存
if (this->m_p != nullptr)
{
delete[] m_p;
m_length = 0;
}
//2:根据a1大小分配内存
this->m_length = a1.m_length;
m_p = new int[m_length];
//3:copy数据
for (int i = 0; i < m_length; i++)
{
m_p[i] = a1[i];
}
return *this;
}
//3:重载 == (a3 == a1)
//a3.operator==(a1)
bool MyArray::operator==(MyArray & a1)
{
if (this->m_length != a1.m_length)
{
return false;
}
for (int i = 0; i < m_length; i++)
{
if (this->m_p[i] != a1[i])
{
return false;
}
}
return true;
}
//4:重载!= (a3 != a1)
bool MyArray::operator!=(MyArray & a1)
{
/*
1:稍微复杂
for (int i = 0; i < m_length; i++)
{
if (this->m_p[i] != a1[i])
{
return true;
}
return false;
}*/
/*
2:正常
if (*this == a1)
{
return false;
}
else
{
return true;
}
*/
//3:最简洁
return !(*this == a1);
}