文章目录
- 一、数组类 等号 = 运算符重载
- 1、等于判断 == 运算符重载
- 2、不等于判断 != 运算符重载
- 二、完整代码示例
- 1、Array.h 数组头文件
- 2、Array.cpp 数组实现类
- 3、Test.cpp 测试类
- 4、执行结果
一、数组类 等号 = 运算符重载
1、等于判断 == 运算符重载
使用 成员函数 实现 等于判断 == 运算符重载 :
- 首先 , 写出函数名 , 函数名规则为 " operate " 后面跟上要重载的运算符 ,
- 要对 Array a , b 对象对比操作 , 使用 == 运算符 , 使用时用法为 a == b ;
- 函数名是
operate==
;
operate==
- 然后 , 根据操作数 写出函数参数 , 参数一般都是 对象的引用 ;
- 要对 Array a , b 对象对比操作 , 使用 == 运算符 , 使用时用法为 a == b ;
- 左操作数 : 其中 左操作数 是 Array a , 这里通过 this 指针调用 , 不需要声明在参数中 ;
- 右操作数 : 右操作数 是 Array b ; 该操作数需要声明在参数中 , 注意需要声明 引用类型 ;
- 上述两个是对象类型 , 对象一般传入 指针 或 引用 , 这里传入引用类型 ;
operator==(Array& a)
- 再后 , 根据业务完善返回值 , 返回值可以是 引用 / 指针 / 元素 ;
- 此处返回值是 bool 类型 , 返回 true 或者 false 布尔值即可 ;
bool operator==(Array& a)
- 最后 , 实现函数体 , 编写具体的运算符操作业务逻辑 ;
- 先对比数组的长度是否相等 ;
- 然后对比数组中每个元素是否相等 ;
// 等于判断 == 运算符重载
bool Array::operator==(Array& a)
{
// 首先判断数组长度是否相等
if (this->m_length != a.m_length)
{
return false;
}
for (size_t i = 0; i < this->m_length; i++)
{
// 只要有一个元素不相等, 整个数组就不相等
if (this->m_space[i] != a.m_space[i])
{
return false;
}
}
return true;
}
2、不等于判断 != 运算符重载
使用 成员函数 实现 不等于判断 != 运算符重载 :
- 首先 , 写出函数名 , 函数名规则为 " operate " 后面跟上要重载的运算符 ,
- 要对 Array a , b 对象对比操作 , 使用 != 运算符 , 使用时用法为 a != b ;
- 函数名是
operate!=
;
operate!=
- 然后 , 根据操作数 写出函数参数 , 参数一般都是 对象的引用 ;
- 要对 Array a , b 对象对比操作 , 使用 != 运算符 , 使用时用法为 a != b ;
- 左操作数 : 其中 左操作数 是 Array a , 这里通过 this 指针调用 , 不需要声明在参数中 ;
- 右操作数 : 右操作数 是 Array b ; 该操作数需要声明在参数中 , 注意需要声明 引用类型 ;
- 上述两个是对象类型 , 对象一般传入 指针 或 引用 , 这里传入引用类型 ;
operator!=(Array& a)
- 再后 , 根据业务完善返回值 , 返回值可以是 引用 / 指针 / 元素 ;
- 此处返回值是 bool 类型 , 返回 true 或者 false 布尔值即可 ;
bool operator!=(Array& a)
- 最后 , 实现函数体 , 编写具体的运算符操作业务逻辑 ;
- 先对比数组的长度是否不相等 ;
- 然后对比数组中每个元素是否不相等 ;
// 不等于判断 != 运算符重载
bool Array::operator!=(Array& a)
{
// 首先判断数组长度是否相等
if (this->m_length != a.m_length)
{
return true;
}
for (size_t i = 0; i < this->m_length; i++)
{
// 只要有一个元素不相等, 整个数组就不相等
if (this->m_space[i] != a.m_space[i])
{
return true;
}
}
return false;
}
二、完整代码示例
1、Array.h 数组头文件
#pragma once
#include "iostream"
using namespace std;
class Array
{
public:
// 无参构造函数
Array();
// 有参构造函数
Array(int len);
// 拷贝构造函数
Array(const Array& array);
// 析构函数
~Array();
public:
// 设置数组数据
void setData(int index, int value);
// 获取数组数据
int getData(int index);
// 获取数组长度
int length();
public:
// 数组下标 [] 操作符重载
int& operator[](int i);
// 等号 = 操作符重载
Array& operator=(Array& a);
// 等于判断 == 运算符重载
bool operator==(Array& a);
// 不等于判断 != 运算符重载
bool operator!=(Array& a);
private:
// 数组长度
int m_length;
// 指向数组数据内存 的指针
int* m_space;
};
2、Array.cpp 数组实现类
#include "Array.h"
// 无参构造函数
Array::Array()
{
// 设置数组长度
m_length = 10;
// 为数组在堆内存中分配内存
m_space = new int[m_length];
cout << " 调用无参构造函数 " << endl;
}
// 有参构造函数
Array::Array(int len)
{
// 设置数组长度
m_length = len;
// 为数组在堆内存中分配内存
m_space = new int[m_length];
cout << " 调用有参构造函数 " << endl;
}
// 拷贝构造函数
// 这是一个深拷贝 拷贝构造函数
Array::Array(const Array& array)
{
// 设置数组长度
m_length = array.m_length;
// 创建数组
m_space = new int[m_length];
// 为数组赋值
for (int i = 0; i < m_length; i++)
{
m_space[i] = array.m_space[i];
}
cout << " 调用拷贝构造函数 " << endl;
}
// 析构函数
Array::~Array()
{
if (m_space != NULL)
{
// 释放 new int[m_length] 分配的内存
delete[] m_space;
m_space = NULL;
}
cout << " 调用析构函数 " << endl;
}
// 设置数组数据
void Array::setData(int index, int value)
{
m_space[index] = value;
}
// 获取数组数据
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& a)
{
if (this->m_space != NULL)
{
// 释放 new int[m_length] 分配的内存
delete[] this->m_space;
this->m_space = NULL;
}
// 设置数组长度
this->m_length = a.m_length;
// 创建数组
this->m_space = new int[m_length];
// 为数组赋值
for (int i = 0; i < m_length; i++)
{
this->m_space[i] = a.m_space[i];
}
cout << " 调用 等号 = 操作符重载 函数" << endl;
// 返回是引用类型
// 返回引用就是返回本身
// 将 this 指针解引用, 即可获取数组本身
return *this;
}
// 等于判断 == 运算符重载
bool Array::operator==(Array& a)
{
// 首先判断数组长度是否相等
if (this->m_length != a.m_length)
{
return false;
}
for (size_t i = 0; i < this->m_length; i++)
{
// 只要有一个元素不相等, 整个数组就不相等
if (this->m_space[i] != a.m_space[i])
{
return false;
}
}
return true;
}
// 不等于判断 != 运算符重载
bool Array::operator!=(Array& a)
{
// 首先判断数组长度是否相等
if (this->m_length != a.m_length)
{
return true;
}
for (size_t i = 0; i < this->m_length; i++)
{
// 只要有一个元素不相等, 整个数组就不相等
if (this->m_space[i] != a.m_space[i])
{
return true;
}
}
return false;
}
3、Test.cpp 测试类
#include "iostream"
using namespace std;
#include "Array.h"
int main() {
Array array(3);
// 设置 array 数组值
for (int i = 0; i < array.length(); i++)
{
//array.setData(i, i + 5);
array[i] = i + 5;
}
// 打印 array 数组值
for (int i = 0; i < array.length(); i++)
{
//cout << array.getData(i) << endl;
cout << array[i] << endl;
}
// 使用拷贝构造函数 赋值
Array array2(3);
Array array3(3);
// 调用重载的等号运算符
array3 = array2 = array;
// 打印 array2 数组值
for (int i = 0; i < array3.length(); i++)
{
//cout << array3.getData(i) << endl;
cout << array3[i] << endl;
}
// 打印 == 重载运算符 计算结果
cout << "array == array3 : " << ( array == array3 ) << endl;
// 打印 != 重载运算符 计算结果
cout << "array != array3 : " << (array != array3) << endl;
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
}
4、执行结果
执行结果 :
调用有参构造函数
5
6
7
调用有参构造函数
调用有参构造函数
调用 等号 = 操作符重载 函数
调用 等号 = 操作符重载 函数
5
6
7
array == array3 : 1
array != array3 : 0
Press any key to continue . . .