📜  c++ 过载运算符 - C++ (1)

📅  最后修改于: 2023-12-03 14:39:56.149000             🧑  作者: Mango

C++ 过载运算符 - C++

在 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, |

示例
例子 1:向量的相加

让我们假设你有一个自定义的向量类 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 对象执行向量相加操作。

例子 2:输出向量

现在让我们为 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 格式的介绍和示例代码。