📜  小于 C++ 中的运算符重载(1)

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

运算符重载

在 C++ 中,我们可以重载运算符。运算符重载是指:对于某些运算符,你可以自定义其行为。比如,你可以让 + 运算符可以对两个自定义的类进行相加操作。

运算符重载规则
  1. 运算符重载函数必须是类的成员函数或者是全局函数。
  2. 一元运算符重载函数不需要参数,二元运算符重载函数需要一个参数。
  3. 运算符重载函数的名称必须以 operator 关键字开头,后面跟着运算符符号。如:operator+ 就是对 + 进行重载。
  4. 运算符重载函数可以是类的友元函数。
  5. 运算符重载函数可以是常量成员函数,这样做的目的是重载常量对象上的运算符,如:operator+ 函数可以被 const 类型的对象所调用。
  6. 运算符重载函数的返回类型可以是任意类型。但在某些情况下,需要返回对象的引用类型。
  7. 运算符重载函数一般不抛出异常。
运算符重载示例

以下代码示例演示了如何重载 < 运算符:

#include <iostream>
using namespace std;

class MyClass {
   public:
      int val;

      bool operator<(const MyClass& obj) const {
         return this -> val < obj.val;
      }
};

int main() {
   MyClass c1, c2;
   c1.val = 10;
   c2.val = 20;

   if (c1 < c2) {
      cout << "c1 is less than c2" << endl;
   } else {
      cout << "c1 is greater than or equal to c2" << endl;
   }
   
   return 0;
}

在上面的代码中,我们重载了 < 运算符。这里使用了一个常量成员函数 operator< 来比较两个对象的属性大小。

输出结果为:

c1 is less than c2
小于运算符重载示例

以下是一个比较两个字符串长度大小的示例:

#include <iostream>
#include <cstring>
using namespace std;

class MyString {
   public:
      char* str;
      
      MyString(char* s) {
         str = new char[strlen(s) + 1];
         strcpy(str, s);
      }

      bool operator<(const MyString& obj) const {
         return strlen(this -> str) < strlen(obj.str);
      }
};

int main() {
   MyString s1 = "hello";
   MyString s2 = "world";

   if (s1 < s2) {
      cout << "s1 is less than s2" << endl;
   } else {
      cout << "s1 is greater than or equal to s2" << endl;
   }
   
   return 0;
}

在上面的代码中,我们重载了 < 运算符。这里使用了一个常量成员函数 operator< 来比较两个字符串的长度大小。

输出结果为:

s1 is less than s2
总结

运算符重载可以让我们自定义运算符的行为,使得代码更加灵活,易于维护。但是,要谨慎使用运算符重载,确保代码的可读性和易用性。