【C++】运算符重载 ⑫ ( 等于判断 == 运算符重载 | 不等于判断 != 运算符重载 | 完整代码示例 )

红太狼 2024-02-24 02:45 111阅读 0赞

文章目录

  • 一、数组类 等号 = 运算符重载
    • 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)
    {

    1. // 首先判断数组长度是否相等
    2. if (this->m_length != a.m_length)
    3. {
    4. return false;
    5. }
    6. for (size_t i = 0; i < this->m_length; i++)
    7. {
    8. // 只要有一个元素不相等, 整个数组就不相等
    9. if (this->m_space[i] != a.m_space[i])
    10. {
    11. return false;
    12. }
    13. }
    14. 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)
    {

    1. // 首先判断数组长度是否相等
    2. if (this->m_length != a.m_length)
    3. {
    4. return true;
    5. }
    6. for (size_t i = 0; i < this->m_length; i++)
    7. {
    8. // 只要有一个元素不相等, 整个数组就不相等
    9. if (this->m_space[i] != a.m_space[i])
    10. {
    11. return true;
    12. }
    13. }
    14. return false;

    }

二、完整代码示例


1、Array.h 数组头文件

  1. #pragma once
  2. #include "iostream"
  3. using namespace std;
  4. class Array
  5. {
  6. public:
  7. // 无参构造函数
  8. Array();
  9. // 有参构造函数
  10. Array(int len);
  11. // 拷贝构造函数
  12. Array(const Array& array);
  13. // 析构函数
  14. ~Array();
  15. public:
  16. // 设置数组数据
  17. void setData(int index, int value);
  18. // 获取数组数据
  19. int getData(int index);
  20. // 获取数组长度
  21. int length();
  22. public:
  23. // 数组下标 [] 操作符重载
  24. int& operator[](int i);
  25. // 等号 = 操作符重载
  26. Array& operator=(Array& a);
  27. // 等于判断 == 运算符重载
  28. bool operator==(Array& a);
  29. // 不等于判断 != 运算符重载
  30. bool operator!=(Array& a);
  31. private:
  32. // 数组长度
  33. int m_length;
  34. // 指向数组数据内存 的指针
  35. int* m_space;
  36. };

2、Array.cpp 数组实现类

  1. #include "Array.h"
  2. // 无参构造函数
  3. Array::Array()
  4. {
  5. // 设置数组长度
  6. m_length = 10;
  7. // 为数组在堆内存中分配内存
  8. m_space = new int[m_length];
  9. cout << " 调用无参构造函数 " << endl;
  10. }
  11. // 有参构造函数
  12. Array::Array(int len)
  13. {
  14. // 设置数组长度
  15. m_length = len;
  16. // 为数组在堆内存中分配内存
  17. m_space = new int[m_length];
  18. cout << " 调用有参构造函数 " << endl;
  19. }
  20. // 拷贝构造函数
  21. // 这是一个深拷贝 拷贝构造函数
  22. Array::Array(const Array& array)
  23. {
  24. // 设置数组长度
  25. m_length = array.m_length;
  26. // 创建数组
  27. m_space = new int[m_length];
  28. // 为数组赋值
  29. for (int i = 0; i < m_length; i++)
  30. {
  31. m_space[i] = array.m_space[i];
  32. }
  33. cout << " 调用拷贝构造函数 " << endl;
  34. }
  35. // 析构函数
  36. Array::~Array()
  37. {
  38. if (m_space != NULL)
  39. {
  40. // 释放 new int[m_length] 分配的内存
  41. delete[] m_space;
  42. m_space = NULL;
  43. }
  44. cout << " 调用析构函数 " << endl;
  45. }
  46. // 设置数组数据
  47. void Array::setData(int index, int value)
  48. {
  49. m_space[index] = value;
  50. }
  51. // 获取数组数据
  52. int Array::getData(int index)
  53. {
  54. return m_space[index];
  55. }
  56. // 获取数组长度
  57. int Array::length()
  58. {
  59. return m_length;
  60. }
  61. // 数组下标 [] 操作符重载
  62. int& Array::operator[](int i)
  63. {
  64. return m_space[i];
  65. }
  66. // 等号 = 操作符重载
  67. Array& Array::operator=(Array& a)
  68. {
  69. if (this->m_space != NULL)
  70. {
  71. // 释放 new int[m_length] 分配的内存
  72. delete[] this->m_space;
  73. this->m_space = NULL;
  74. }
  75. // 设置数组长度
  76. this->m_length = a.m_length;
  77. // 创建数组
  78. this->m_space = new int[m_length];
  79. // 为数组赋值
  80. for (int i = 0; i < m_length; i++)
  81. {
  82. this->m_space[i] = a.m_space[i];
  83. }
  84. cout << " 调用 等号 = 操作符重载 函数" << endl;
  85. // 返回是引用类型
  86. // 返回引用就是返回本身
  87. // 将 this 指针解引用, 即可获取数组本身
  88. return *this;
  89. }
  90. // 等于判断 == 运算符重载
  91. bool Array::operator==(Array& a)
  92. {
  93. // 首先判断数组长度是否相等
  94. if (this->m_length != a.m_length)
  95. {
  96. return false;
  97. }
  98. for (size_t i = 0; i < this->m_length; i++)
  99. {
  100. // 只要有一个元素不相等, 整个数组就不相等
  101. if (this->m_space[i] != a.m_space[i])
  102. {
  103. return false;
  104. }
  105. }
  106. return true;
  107. }
  108. // 不等于判断 != 运算符重载
  109. bool Array::operator!=(Array& a)
  110. {
  111. // 首先判断数组长度是否相等
  112. if (this->m_length != a.m_length)
  113. {
  114. return true;
  115. }
  116. for (size_t i = 0; i < this->m_length; i++)
  117. {
  118. // 只要有一个元素不相等, 整个数组就不相等
  119. if (this->m_space[i] != a.m_space[i])
  120. {
  121. return true;
  122. }
  123. }
  124. return false;
  125. }

3、Test.cpp 测试类

  1. #include "iostream"
  2. using namespace std;
  3. #include "Array.h"
  4. int main() {
  5. Array array(3);
  6. // 设置 array 数组值
  7. for (int i = 0; i < array.length(); i++)
  8. {
  9. //array.setData(i, i + 5);
  10. array[i] = i + 5;
  11. }
  12. // 打印 array 数组值
  13. for (int i = 0; i < array.length(); i++)
  14. {
  15. //cout << array.getData(i) << endl;
  16. cout << array[i] << endl;
  17. }
  18. // 使用拷贝构造函数 赋值
  19. Array array2(3);
  20. Array array3(3);
  21. // 调用重载的等号运算符
  22. array3 = array2 = array;
  23. // 打印 array2 数组值
  24. for (int i = 0; i < array3.length(); i++)
  25. {
  26. //cout << array3.getData(i) << endl;
  27. cout << array3[i] << endl;
  28. }
  29. // 打印 == 重载运算符 计算结果
  30. cout << "array == array3 : " << ( array == array3 ) << endl;
  31. // 打印 != 重载运算符 计算结果
  32. cout << "array != array3 : " << (array != array3) << endl;
  33. // 控制台暂停 , 按任意键继续向后执行
  34. system("pause");
  35. return 0;
  36. }

4、执行结果

执行结果 :

  1. 调用有参构造函数
  2. 5
  3. 6
  4. 7
  5. 调用有参构造函数
  6. 调用有参构造函数
  7. 调用 等号 = 操作符重载 函数
  8. 调用 等号 = 操作符重载 函数
  9. 5
  10. 6
  11. 7
  12. array == array3 : 1
  13. array != array3 : 0
  14. Press any key to continue . . .

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,111人围观)

还没有评论,来说两句吧...

相关阅读