📜  C++ |运算符重载|问题10(1)

📅  最后修改于: 2023-12-03 15:29:52.075000             🧑  作者: Mango

C++ |运算符重载|问题10

什么是运算符重载?

在 C++ 中,我们可以对运算符进行重载,使其能够作用于自定义类型的对象。通过运算符重载,我们可以改变默认的运算符操作方式,使其适应于自定义类型的需求。

运算符重载的语法

运算符重载的语法如下:

返回类型 operator 运算符(参数列表){
   //函数体
}

其中,operator 表示需要重载的运算符,返回类型可以是任意类型,参数列表可以为空或包含一个或多个参数。

下面是一个简单的示例,演示了如何重载加法运算符:

#include <iostream>
using namespace std;

class Complex {
   private:
      int real, imag;

   public:
      Complex(int r = 0, int i =0) {
         real = r;
         imag = i;
      }

      Complex operator + (Complex const &obj) {  // + 运算符重载
         Complex res;
         res.real = real + obj.real;
         res.imag = imag + obj.imag;
         return res;
      }

      void print() {
         cout << real << " + i" << imag << endl;
      }
};

int main() {
   Complex c1(2,3), c2(3,4);
   Complex c3 = c1 + c2;  // 调用运算符重载函数
   c3.print();
   return 0;
}
问题描述

现在,假设你需要比较两个自定义类型的对象是否相等,你需要怎么做呢?

解决方案

对于自定义类型,我们需要重载等号运算符来实现对象之间的比较。下面是一个简单的示例,演示了如何重载等号运算符:

#include <iostream>
using namespace std;

class Complex {
   private:
      int real, imag;

   public:
      Complex(int r = 0, int i =0) {
         real = r;
         imag = i;
      }

      bool operator == (Complex const &obj) {  // == 运算符重载
         return (real == obj.real) && (imag == obj.imag);
      }
};

int main() {
   Complex c1(2,3), c2(3,4);
   if (c1 == c2) {
      cout << "c1 is equal to c2" << endl;
   } else {
      cout << "c1 is not equal to c2" << endl;
   }
   return 0;
}

在上面的代码中,我们为 Complex 类型重载了等号运算符。在 main 函数中,我们使用了刚刚重载的等号运算符来比较两个 Complex 对象是否相等。

总结

运算符重载是 C++ 中必不可少的面向对象编程技术之一。通过运算符重载,我们可以更方便地对自定义类型进行操作,使得代码更加简洁和易读。

当我们需要比较自定义类型的对象是否相等时,需要为该类型重载等号运算符,以便在程序中使用更加方便和简单。