📅  最后修改于: 2023-12-03 14:40:00.313000             🧑  作者: Mango
在C++中,运算符重载是一种特殊的函数重载,通过它我们可以重新定义运算符的行为。这种功能强大的特性可以使我们的代码更简洁、更直观。
返回类型 operator 运算符 (参数列表)
{
//重载运算符的实现代码
}
例如下面是一个重载加号运算符的例子,用来加两个自定义类型的对象。
class Complex
{
public:
Complex operator+(const Complex &c)
{
return Complex(real + c.real, imag + c.imag);
}
private:
float real; //实部
float imag; //虚部
};
运算符重载函数的返回值与被重载的运算符的返回值类型相同。
运算符的参数个数固定,无法通过重载来改变。例如,加法运算符必须有两个参数,一元运算符只能有一个参数。
运算符优先级不能改变,因为一个运算符的优先级是由语法规则定义的,而不是由函数重载定义的。
运算符的结合性也不能改变。例如,赋值运算符是右结合的,就算我们对它进行了重载,它的结合性依然是右结合的。
使用运算符时,必须保证运算符重载函数可调用。运算符可以是成员函数或全局函数,但必须保证运算符的参数个数和类型与被重载的运算符完全匹配。
class Complex
{
public:
Complex operator+(const Complex &c)
{
return Complex(real + c.real, imag + c.imag);
}
private:
float real; //实部
float imag; //虚部
};
class Counter
{
public:
Counter& operator++()
{
count++;
return *this;
}
private:
int count;
};
class Point
{
friend ostream& operator<<(ostream &out, const Point &p);
private:
int x;
int y;
};
ostream& operator<<(ostream &out, const Point &p)
{
out << "Point(" << p.x << ", " << p.y << ")";
return out;
}
运算符重载在C++中是非常强大的特性。我们可以使用它来定义自己的运算符,可以使代码更简洁、更直观,增加代码的可读性。但是在使用时也需要注意一些细节,确保运算符可调用并且满足语言的规范。