📅  最后修改于: 2023-12-03 15:23:22.733000             🧑  作者: Mango
在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
。
注意,我们重载的下标运算符返回了一个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++中的一个非常有用的特性,可以将类的对象用作数组。在设计用户定义的类型时,可以使用重载的下标运算符来简化代码,并使代码更加易读。