在C++中,重载操作运算符是一种为类或结构体创建新版本的运算符的方法,以便它们可以用于自定义数据类型。运算符重载可以让其他程序员以直观的方式使用自定义类型,使其表现得像内置类型一样。重载一个运算符时,实际上是在定义一个函数,该函数指定了当该运算符用于自定义类型时应该执行的操作。运算符重载的函数可以是成员函数或非成员函数(通常是友元函数)。以下是一些相关的基本概念:
ReturnType operatorOp(Type &argument);
其中:
ReturnType 是运算符函数返回的数据类型。
operator 是一个关键字,表明这是一个运算符重载函数。
Op 是要重载的运算符。
Type &argument 是传递给运算符的参数(如果运算符是二元的,则可能有两个参数)。
运算符可以是成员函数或非成员函数(即全局函数)。如果运算符是成员函数,它的第一个参数隐式地是*this对象的引用。例如:
class MyClass {
public:
MyClass& operator=(const MyClass &rightOperand) {
// 赋值逻辑
// 返回*this以支持链式赋值
return *this;
}
};
现在给出一个简单的例子,演示如何为一个表示复数的类重载加法运算符:
#include <iostream>
// 复数类
class Complex {
public:
double real; // 实部
double imag; // 虚部
// 构造函数
Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) {}
// 重载加法运算符
Complex operator+(const Complex& other) const {
return Complex(real + other.real, imag + other.imag);
}
// 打印复数
void print() const {
std::cout << "(" << real << ", " << imag << "i)" << std::endl;
}
};
int main() {
Complex c1(1.0, 2.0);
Complex c2(2.0, 3.0);
// 使用重载的加法运算符
Complex c3 = c1 + c2;
// 打印结果
c3.print(); // 输出: (3, 5i)
return 0;
}
在这个例子中,我们定义了一个 Complex 类来表示复数,并重载了加法运算符 +。重载的 operator+ 函数接受一个 Complex 对象作为参数,并返回两个复数相加的结果。在 main 函数中,我们创建了两个 Complex 对象并使用 + 运算符将它们相加,然后打印出结果。由于我们重载了 + 运算符,因此可以直接使用 c1 + c2 来计算两个复数的和。