# C++ 运算符重载

> 原文： [https://www.programiz.com/cpp-programming/operator-overloading](https://www.programiz.com/cpp-programming/operator-overloading)

#### 在 C++ 中，可以更改运算符的工作方式（对于用户定义的类型）。 在本文中，您将学习实现运算符重载功能。

对于基本类型的变量，例如`int`，`float`，`double`等，运算符的含义始终相同。例如：要相加两个整数，将使用`+`运算符。

但是，对于用户定义的类型（例如：对象），您可以重新定义运算符的工作方式。 例如：

一个类的两个对象是否包含字符串作为其数据成员。 您可以重新定义+运算符的含义，并使用它来连接那些字符串。

C++ 编程中的此功能允许程序员重新定义运算符的含义（当它们对类对象进行运算时），这称为运算符重载。

* * *

## 为什么要使用运算符重载？

您可以编写任何 C++ 程序，而无需知道运算符重载。 但是，程序员大量使用运算符操作来使程序直观。 例如，

您可以将代码替换为：

```cpp
calculation = add(multiply(a, b),divide(a, b));
```

至

```cpp
calculation = (a*b)+(a/b);
```

* * *

## 如何在 C++ 编程中重载运算符？

为了重载运算符，在类内部将特殊的运算符函数定义为：

```cpp
class className
{
    ... .. ...
    public
       returnType operator symbol (arguments)
       {
           ... .. ...
       } 
    ... .. ...
};

```

*   在这里，`returnType`是函数的返回类型。
*   函数的 `returnType`后跟运算符关键字。
*   `Symbol`是要重载的运算符。 像：`+, <, -, ++`
*   您可以通过类似于函数的方式将参数传递给运算符。

* * *

## 示例：C++ 编程中的运算符重载

```cpp
#include <iostream>
using namespace std;

class Test
{
   private:
      int count;

   public:
       Test(): count(5){}

       void operator ++() 
       { 
          count = count+1; 
       }
       void Display() { cout<<"Count: "<<count; }
};

int main()
{
    Test t;
    // this calls "function void operator ++()" function
    ++t;    
    t.Display();
    return 0;
} 
```

**输出**

```cpp
Count: 6
```

当`++`运算符对`test`类的对象（在这种情况下为对象`t`）进行操作时，将调用此函数。

在程序中，定义了`void operator ++ ()`运算符功能（在`Test`类内部）。

对于`t`对象，此功能将`count`的值加 1。

* * *

### 要记住的事情

1.  运算符重载使您可以重新定义运算符仅对用户定义的类型（对象，结构）起作用的方式。 它不能用于内置类型（`int`，`float`，`char`等）。
2.  在 C++ 中，默认情况下已经重载了两个运算符=和&。 例如：要复制相同类的对象，可以直接使用=运算符。 您不需要创建运算符。
3.  运算符重载不能更改运算符的优先级和关联。 但是，如果要更改求值顺序，则应使用括号。
4.  C++ 中有 4 个不能重载的运算符。 它们是`::`（范围分辨率），`.`（成员选择），`.*`（通过功能指针选择成员）和`?:`（三元运算符）。

* * *

### 使用运算符重载时遵循最佳实践

运算符重载允许您定义运算符的工作方式（所需的方式）。

在上面的示例中，`++`运算符对对象进行操作，以将数据成员`count`的值增加 1。

```cpp
void operator ++() 
    { 
        count = count+1; 
    }

```

但是，如果使用以下代码。 当使用`++`运算符时，它会将`count`的值减小 100。

```cpp
void operator ++() 
    { 
        count = count-100; 
    }

```

从技术上讲这可能是正确的。 但是，此代码令人困惑，并且难以理解和调试。

作为程序员，您要以适当的方式正确地使用操作符重载是您的工作。

* * *

在上面的示例中，当使用`++`运算符时，`count`的值增加 1。 但是，该程序在某种意义上是不完整的，您不能使用以下代码：

```cpp
t1 = ++t
```

这是因为运算符的返回类型为`void`。

访问这些页面以了解更多信息：

*   [如何以正确的方式重载递增运算符？](/cpp-programming/increment-decrement-operator-overloading)
*   [如何重载二元运算符-减去复数？](/cpp-programming/operator-overloading/binary-operator-overloading)