原文: https://www.programiz.com/cpp-programming/operator-overloading
在 C++ 中,可以更改运算符的工作方式(对于用户定义的类型)。 在本文中,您将学习实现运算符重载功能。
对于基本类型的变量,例如int
,float
,double
等,运算符的含义始终相同。例如:要相加两个整数,将使用+
运算符。
但是,对于用户定义的类型(例如:对象),您可以重新定义运算符的工作方式。 例如:
一个类的两个对象是否包含字符串作为其数据成员。 您可以重新定义+运算符的含义,并使用它来连接那些字符串。
C++ 编程中的此功能允许程序员重新定义运算符的含义(当它们对类对象进行运算时),这称为运算符重载。
为什么要使用运算符重载?
您可以编写任何 C++ 程序,而无需知道运算符重载。 但是,程序员大量使用运算符操作来使程序直观。 例如,
您可以将代码替换为:
calculation = add(multiply(a, b),divide(a, b));
至
calculation = (a*b)+(a/b);
如何在 C++ 编程中重载运算符?
为了重载运算符,在类内部将特殊的运算符函数定义为:
class className
{
... .. ...
public
returnType operator symbol (arguments)
{
... .. ...
}
... .. ...
};
- 在这里,
returnType
是函数的返回类型。 - 函数的
returnType
后跟运算符关键字。 Symbol
是要重载的运算符。 像:+, <, -, ++
- 您可以通过类似于函数的方式将参数传递给运算符。
示例:C++ 编程中的运算符重载
#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;
}
输出
Count: 6
当++
运算符对test
类的对象(在这种情况下为对象t
)进行操作时,将调用此函数。
在程序中,定义了void operator ++ ()
运算符函数(在Test
类内部)。
对于t
对象,此函数将count
的值加 1。
要记住的事情
- 运算符重载使您可以重新定义运算符仅对用户定义的类型(对象,结构)起作用的方式。 它不能用于内置类型(
int
,float
,char
等)。 - 在 C++ 中,默认情况下已经重载了两个运算符=和&。 例如:要复制相同类的对象,可以直接使用=运算符。 您不需要创建运算符。
- 运算符重载不能更改运算符的优先级和关联。 但是,如果要更改求值顺序,则应使用括号。
- C++ 中有 4 个不能重载的运算符。 它们是
::
(范围分辨率),.
(成员选择),.*
(通过函数指针选择成员)和?:
(三元运算符)。
使用运算符重载时遵循最佳实践
运算符重载允许您定义运算符的工作方式(所需的方式)。
在上面的示例中,++
运算符对对象进行操作,以将数据成员count
的值增加 1。
void operator ++()
{
count = count+1;
}
但是,如果使用以下代码。 当使用++
运算符时,它会将count
的值减小 100。
void operator ++()
{
count = count-100;
}
从技术上讲这可能是正确的。 但是,此代码令人困惑,并且难以理解和调试。
作为程序员,您要以适当的方式正确地使用操作符重载是您的工作。
在上面的示例中,当使用++
运算符时,count
的值增加 1。 但是,该程序在某种意义上是不完整的,您不能使用以下代码:
t1 = ++t
这是因为运算符的返回类型为void
。
访问这些页面以了解更多信息: