温馨提示×

c++ operator[] 如何重载

c++
小樊
83
2024-12-02 15:45:50
栏目: 编程语言

在 C++ 中,可以通过重载 operator[] 来实现数组或容器的访问操作符。以下是一个示例,演示了如何重载 operator[] 以实现一个简单的类 MyArray 的访问操作符:

#include <iostream>

class MyArray {
public:
    // 构造函数
    MyArray(int size) : size_(size), data_(new int[size]) {}

    // 析构函数
    ~MyArray() { delete[] data_; }

    // 重载 operator[] 以实现访问操作符
    int& operator[](int index) {
        if (index < 0 || index >= size_) {
            throw std::out_of_range("Index out of range");
        }
        return data_[index];
    }

    // 重载 operator[] 以实现常量访问操作符
    const int& operator[](int index) const {
        if (index < 0 || index >= size_) {
            throw std::out_of_range("Index out of range");
        }
        return data_[index];
    }

private:
    int size_;
    int* data_;
};

int main() {
    MyArray arr(5);

    // 使用重载的 operator[] 设置和获取元素值
    arr[0] = 10;
    arr[1] = 20;
    arr[2] = 30;
    arr[3] = 40;
    arr[4] = 50;

    // 输出元素值
    std::cout << "arr[0] = " << arr[0] << std::endl;
    std::cout << "arr[1] = " << arr[1] << std::endl;
    std::cout << "arr[2] = " << arr[2] << std::endl;
    std::cout << "arr[3] = " << arr[3] << std::endl;
    std::cout << "arr[4] = " << arr[4] << std::endl;

    return 0;
}

在这个示例中,我们定义了一个名为 MyArray 的类,它包含一个整数数组 data_ 和一个表示数组大小的整数 size_。我们重载了 operator[] 以实现访问操作符,使得可以通过 arr[index] 语法来访问数组元素。同时,我们还重载了常量版本的 operator[],以便在常量对象上使用。

注意,为了确保数组访问的安全性,我们在重载的 operator[] 中添加了边界检查,并在索引超出范围时抛出 std::out_of_range 异常。

0