🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 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)