Skip to content

Latest commit

 

History

History
155 lines (104 loc) · 4.29 KB

File metadata and controls

155 lines (104 loc) · 4.29 KB

C++ 运算符重载

原文: https://www.programiz.com/cpp-programming/operator-overloading

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

对于基本类型的变量,例如intfloatdouble等,运算符的含义始终相同。例如:要相加两个整数,将使用+运算符。

但是,对于用户定义的类型(例如:对象),您可以重新定义运算符的工作方式。 例如:

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

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。


要记住的事情

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

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

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

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

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

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

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

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

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


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

t1 = ++t

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

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