📅  最后修改于: 2023-12-03 14:39:56.149000             🧑  作者: Mango
在 C++ 中,你可以为自定义的类型重载运算符。这使得你可以根据你的类型定义不同的操作,以便更自然地与内置类型一起使用。这个过程称为运算符重载。
重载运算符的目的是使操作符的行为对不同的类型具有统一的语义,并且让自定义类型能够像内置类型一样直观地使用。通过过载运算符,你可以为不同的操作符定义自定义的操作。
通过使用特殊的函数语法,可以重载 C++ 中的大多数运算符。运算符重载被实现为函数调用,其中函数名称是 "operator" 关键字后跟要重载的运算符。下面是一些常用运算符及其对应的函数名:
| 运算符 | 对应的函数名 | |--------|---------------| | + | operator+ | | - | operator- | | * | operator* | | / | operator/ | | ++ | operator++ | | -- | operator-- | | = | operator= | | == | operator== | | != | operator!= | | > | operator> | | < | operator< | | >= | operator>= | | <= | operator<= | | << | operator<< | | >> | operator>> | | [] | operator[] | | () | operator() | | -> | operator-> | | ->* | operator->* | | += | operator+= | | -= | operator-= | | = | operator= | | /= | operator/= | | %= | operator%= | | & | operator& | | | | operator| | | ! | operator! | | ~ | operator~ | | & | operator& | | | | operator| | | ^ | operator^ | | << | operator<< | | >> | operator>> | | %= | operator%= | | &= | operator&= | | |= | operator|= | | ^= | operator^= | | <<= | operator<<= | | >>= | operator>>= | | , | operator, |
让我们假设你有一个自定义的向量类 Vector
,你想要能够像内置类型一样使用 +
运算符来相加两个向量。
class Vector {
public:
int x, y;
Vector operator+(const Vector& other) {
Vector result;
result.x = x + other.x;
result.y = y + other.y;
return result;
}
};
int main() {
Vector v1, v2, sum;
v1.x = 1; v1.y = 2;
v2.x = 3; v2.y = 4;
sum = v1 + v2;
return 0;
}
在上面的示例中,我们重载了 +
运算符,以便我们可以对两个 Vector
对象执行向量相加操作。
现在让我们为 Vector
类添加一个友元函数,以便我们可以使用 <<
运算符输出向量的内容。
class Vector {
public:
int x, y;
friend ostream& operator<<(ostream& os, const Vector& v) {
os << "(" << v.x << ", " << v.y << ")";
return os;
}
};
int main() {
Vector v;
v.x = 1; v.y = 2;
cout << "Vector: " << v << endl;
return 0;
}
在上面的示例中,我们使用 friend
关键字声明了一个友元函数 operator<<
,它允许我们使用 <<
运算符来输出向量的内容。
通过重载运算符,你可以为自定义的类型指定不同的操作,使其更直观地使用,并与内置类型保持一致。语法上,你需要为每个要重载的运算符定义一个特定的函数。返回的代码片段如上所示,返回了一个 Markdown 格式的介绍和示例代码。