banner
Matrix

Matrix

Abyss
email
github

Petty C++ 运算符重载

在 C++ 中使用operator关键字为运算符提供不同的行为。

基本概念#

  • 重载运算符允许自定义行为。
  • 重载运算符不改变运算符的固有优先级和结合性。

operator语法#

type operator symbol(params)

其中,type是返回类型,operator symbol表示要重载的运算符。例如,加法运算符和加法赋值运算符的重载形式为:

// 加法
operator+
// 加法赋值
operator+=

一个简单的示例#

以下示例展示了如何重载加法运算符:

class MyClass {
public:
    MyClass(int val) : value(val) {}

    // 重载加法运算符
    MyClass operator+(const MyClass& other) const {
        return MyClass(value + other.value - 1);
    }

    int getValue() const {
        return value;
    }

private:
    int value;
};

不可重载的运算符#

C++ 中大多数运算符都可以重载,但由于编译器的实现原理,以下运算符不能被重载:

  • .
  • .*
  • ::
  • ?:
  • 一些非符号运算符
    • sizeof
    • typeid
    • const_cast
    • dynamic_cast
    • static_cast

成员函数重载和全局函数重载#

  • 成员函数重载:通过类的成员函数实现,此时第一个参数是隐式的this指针。
class MyClass {
public:
    MyClass(int val) : data(val) {}

    // 成员函数重载加法运算符
    MyClass operator+(const MyClass& other) const {
        return MyClass(data + other.data);
    }

private:
    int data;
};
  • 全局函数重载:通过友元函数或普通函数实现,适用于需要对两个不同类型的对象进行操作的情况。
class MyClass {
public:
    MyClass(int val) : data(val) {}

    // 声明友元函数以访问私有成员
    friend MyClass operator+(const MyClass& lhs, const MyClass& rhs);

private:
    int data;
};

// 全局函数重载加法运算符
MyClass operator+(const MyClass& lhs, const MyClass& rhs) {
    return MyClass(lhs.data + rhs.data);
}
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。