📜  在C++中重载下标或数组索引运算符[](1)

📅  最后修改于: 2023-12-03 15:23:22.733000             🧑  作者: Mango

在C++中重载下标或数组索引运算符[]

在C++中,我们可以重载下标运算符[](数组索引运算符),使我们可以访问一个类的对象像访问数组一样,这样可以使代码更加简洁,易读。

实现数组类

首先,让我们创建一个简单的数组类,它包含一个私有成员变量m_arr,在构造函数中,我们创建一个新的动态数组,并用0来填充它。

class MyArray
{
private:
    int* m_arr;

public:
    MyArray(int len)
    {
        m_arr = new int[len];
        for(int i = 0; i < len; i++)
            m_arr[i] = 0;
    }
};
重载下标运算符[]

现在,我们可以使用下标运算符[]来访问数组的元素,例如,arr[0]将返回数组中的第一个元素。为了实现这个功能,我们需要在我们的类中重载下标运算符[]:

class MyArray
{
private:
    int* m_arr;

public:
    MyArray(int len)
    {
        m_arr = new int[len];
        for(int i = 0; i < len; i++)
            m_arr[i] = 0;
    }

    int& operator[] (const int index)
    {
        return m_arr[index];
    }
};

现在,我们可以通过下标操作符[]来访问MyArray类中的元素了,就像访问数组一样。例如:

int main()
{
    MyArray arr(10);
    arr[0] = 5;
    std::cout << arr[0] << std::endl;
    return 0;
}

输出将会是:5

非 const 和 const 运算符

注意,我们重载的下标运算符返回了一个int&类型,这意味着我们可以使用它来读取和修改数组元素。如果我们希望防止用户修改数组元素,则可以声明一个带有const参数的操作符,以防止对元素的修改:

class MyArray
{
private:
    int* m_arr;

public:
    MyArray(int len)
    {
        m_arr = new int[len]; 
        for(int i = 0; i < len; i++)
            m_arr[i] = 0;
    }

    int& operator[] (const int index)
    {
        return m_arr[index];
    }

    const int& operator[] (const int index) const
    {
        return m_arr[index];
    }
};

这样,如果用户尝试修改数组元素,将会得到一个编译时错误,从而保护数组类的数据的完整性。

结论

重载下标运算符[]是C++中的一个非常有用的特性,可以将类的对象用作数组。在设计用户定义的类型时,可以使用重载的下标运算符来简化代码,并使代码更加易读。