📜  C++重载(运算符和函数)(1)

📅  最后修改于: 2023-12-03 14:40:00.324000             🧑  作者: Mango

C++重载(运算符和函数)

在C++中,重载可以被定义为函数或运算符的名称,在语法上具有相同的输入参数或操作数。这允许程序员根据需要在同一作用域中定义多个具有不同类型或参数数量的功能。

运算符重载

C++语言允许程序员重载大多数运算符,包括算术、比较、赋值、逻辑和位运算符。重载运算符通常被定义为成员函数或非成员函数。

成员函数定义的运算符重载可以被用于类的实例。运算符重载的非成员函数定义可以接受类的实例作为参数,也可以被用于普通数据类型。

重载运算符为成员函数

要将运算符定义为类的成员函数,必须使用operator关键字,并遵循相关的语法规则。比如,下面的代码演示了如何重载"+"运算符作为类的成员函数:

class MyClass {
public:
  int value;

  MyClass operator+(const MyClass& other) const {
    MyClass result;
    result.value = value + other.value;
    return result;
  }
};

MyClass a = {1};
MyClass b = {2};

MyClass c = a + b; // c.value == 3

在上面的代码中,MyClass定义了一个名为value的公共成员变量,并重载了"+"运算符。重载的函数被定义为const成员函数,并接受另一个MyClass实例作为参数。函数使用传递的实例计算结果,并返回一个新的MyClass实例,该实例包含计算出的值。

重载运算符为非成员函数

要将运算符定义为非成员函数,必须使用operator关键字,并遵循相关的语法规则。这些运算符函数的第一个参数应该是该运算符所应用的类的实例的引用。下面的代码演示了如何重载"+"运算符作为非成员函数:

class MyClass {
public:
  int value;

  MyClass operator+(const MyClass& other) const;
};

MyClass operator+(const MyClass& a, const MyClass& b) {
  MyClass result;
  result.value = a.value + b.value;
  return result;
}

MyClass a = {1};
MyClass b = {2};

MyClass c = a + b; // c.value == 3

在上述代码中,MyClass定义了一个名为value的公共成员变量,并重载了"+"运算符。在非成员函数定义中,首个参数是调用运算符的第一个实参,第二个参数是第二个实参。这些参数用于计算结果。函数返回一个新的MyClass实例,该实例包含计算出的值。

函数重载

函数的重载允许程序员在同一范围内使用相同名称的多个函数,只有参数列表不同。编译器会根据调用的参数类型来选择正确的功能。

以下是C++中函数重载的示例:

#include <iostream>
using namespace std;

int sum(int x, int y) {
  return x + y;
}

double sum(double x, double y) {
  return x + y;
}

int main () {
  int intResult = sum(1, 2);
  double doubleResult = sum(1.5, 2.5);
  cout << "Int result: " << intResult << endl;
  cout << "Double result: " << doubleResult << endl;
  return 0;
}

在上述代码中,我们有两个名为sum的函数,分别接受整数或双精度浮点数作为参数,并将它们相加并返回结果。当main函数中调用sum时,编译器将自动决定调用哪个函数,这取决于传递给函数的参数类型。

总结

重载可以被用于函数或运算符的名称,在语法上具有相同的输入参数或操作数。在C++中,运算符可以被定义为类成员函数或非成员函数。函数重载可以被用于同一范围内的多个具有相同名称但不同参数列表的函数。