首页 > 编程笔记

C++重载[](下标运算符)

在 C++ 中,数组可以通过下标操作符[ ]来访问内部保存的元素。同样地,通过重载[ ]运算符,使得自定义的类也能够像数组一样使用索引来访问元素

重载[ ]下标运算符的格式如下:
ReturnType &operator[](IndexType index) {
    // 这里编写根据索引访问元素的逻辑
    // 返回对应的元素引用
}
ReturnType 是希望返回的元素类型,通常是该目标成员类型的引用;IndexType 是索引的类型,可以是整数类型,枚举等。

注意,下标运算符重载函数只能有一个参数,且只能以成员函数的方式,而不能采用全局函数(友元)的方式。

【实例】创建一个名为 CustomArray 的类,用于存储整数数据,通过重载[ ]运算符,便于通过索引访问数组中的元素。
#include <iostream>

class CustomArray {
private:
    int data[10]; // 假设数组长度为10

public:
    // 重载下标运算符
    int &operator[](int index) {
        if (index < 0 || index >= 10) {
            // 处理越界情况
            std::cout << "Index out of bounds!" << std::endl;
            // 返回一个合适的默认值,或者抛出异常
            return data[0];
        }
        return data[index];
    }
};

int main() {
    CustomArray arr;

    for (int i = 0; i < 10; ++i) {
        arr[i] = i * 2; // 赋值操作
    }

    for (int i = 0; i < 12; ++i) {
        std::cout << "arr[" << i << "] = " << arr[i] << std::endl; // 访问操作
    }

    return 0;
}
运行结果为:

arr[0] = 0
arr[1] = 2
arr[2] = 4
arr[3] = 6
arr[4] = 8
arr[5] = 10
arr[6] = 12
arr[7] = 14
arr[8] = 16
arr[9] = 18
Index out of bounds!
arr[10] = 0
Index out of bounds!
arr[11] = 0

示例中创建了一个名为 CustomArray 的类,并在类的内部重载了下标运算符[ ],main() 函数中演示了如何使用重载的下标运算符来赋值和访问元素。

总结

通过重载下标运算符[ ],可以在自定义的类中像数组一样用索引来访问类的成员,增强了类的灵活性和易用性。

推荐阅读