C++ 重载运算符和重载函数学习笔记
什么是重载运算符和重载函数
在C++中,我们可以定义多个同名的函数和运算符。这就是重载(Overload)。
重载运算符是指对C++中已有的运算符进行重新定义,使它们能够用于特定的类类型。通过重载运算符,我们可以使自定义数据类型表现得像内置数据类型一样,从而提高代码的可读性和易用性。
重载函数是指在同一个作用域内,可以定义多个同名的函数,但是它们的参数列表必须不同(参数类型或者参数个数不同)。通过这种方式,我们可以让同名函数实现不同的功能。
如何重载运算符
C++中的每一个运算符都有一个与之对应的函数。重载运算符就相当于重载这些函数,只需要将运算符改写为函数名即可。
以+
运算符为例,我们可以定义如下的函数来重载它:
c++Copy Codeclass 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 Codeint 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)
从输出结果可以看出,我们成功地使用了重载运算符和重载函数,并得到了预期的结果。