C++ 重载运算符和重载函数学习笔记

什么是重载运算符和重载函数

在C++中,我们可以定义多个同名的函数和运算符。这就是重载(Overload)。

重载运算符是指对C++中已有的运算符进行重新定义,使它们能够用于特定的类类型。通过重载运算符,我们可以使自定义数据类型表现得像内置数据类型一样,从而提高代码的可读性和易用性。

重载函数是指在同一个作用域内,可以定义多个同名的函数,但是它们的参数列表必须不同(参数类型或者参数个数不同)。通过这种方式,我们可以让同名函数实现不同的功能。

如何重载运算符

C++中的每一个运算符都有一个与之对应的函数。重载运算符就相当于重载这些函数,只需要将运算符改写为函数名即可。

+运算符为例,我们可以定义如下的函数来重载它:

c++Copy Code
class Complex { public: Complex operator + (const Complex& other) const { return Complex(this->real + other.real, this->imag + other.imag); } private: double real; // 实部 double imag; // 虚部 };

上面的代码中,operator + 就是+运算符对应的函数,我们为 Complex 类型定义了一个重载的加法运算符。该函数接受一个 Complex 类型的参数 other,返回值也是一个 Complex 类型的对象,表示两个复数相加的结果。通过这种方式,我们就可以使用 + 运算符对 Complex 类型的对象进行加法运算了。

如何重载函数

在C++中,函数重载的条件是函数名称相同,但是函数的参数列表不同。参数列表可以通过参数的类型、个数和顺序来区分。

例如,我们可以定义如下的两个函数来计算两个整数的和:

c++Copy Code
int add(int a, int b) { return a + b; } int add(int a, int b, int c) { return a + b + c; }

上面的代码中,两个函数的名称都是 add,但是它们的参数列表不同,因此它们是两个不同的函数。第一个函数接受两个整数作为参数,返回它们的和;第二个函数接受三个整数作为参数,返回它们的和。

实例演示

下面我们将展示一个例子,演示如何使用重载运算符和重载函数。

c++Copy Code
#include <iostream> class Complex { public: Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) {} Complex operator + (const Complex& other) const { return Complex(this->real + other.real, this->imag + other.imag); } friend std::ostream& operator << (std::ostream& os, const Complex& c) { os << "(" << c.real << ", " << c.imag << ")"; return os; } private: double real; // 实部 double imag; // 虚部 }; int add(int a, int b) { std::cout << "调用了 add(int, int) 函数" << std::endl; return a + b; } double add(double a, double b) { std::cout << "调用了 add(double, double) 函数" << std::endl; return a + b; } int main() { // 使用重载函数 int x = add(1, 2); double y = add(1.0, 2.0); std::cout << "x = " << x << std::endl; std::cout << "y = " << y << std::endl; // 使用重载运算符 Complex c1(1, 2); Complex c2(3, 4); Complex c3 = c1 + c2; std::cout << "c1 = " << c1 << std::endl; std::cout << "c2 = " << c2 << std::endl; std::cout << "c3 = " << c3 << std::endl; return 0; }

上面的代码中,我们定义了一个 Complex 类型,实现了重载加号运算符和插入运算符。我们还定义了两个 add 函数来演示函数重载。在 main 函数中,我们分别使用了重载函数和重载运算符,并输出了对应的结果。

输出结果如下:

textCopy Code
调用了 add(int, int) 函数 调用了 add(double, double) 函数 x = 3 y = 3 c1 = (1, 2) c2 = (3, 4) c3 = (4, 6)

从输出结果可以看出,我们成功地使用了重载运算符和重载函数,并得到了预期的结果。