一 概述
我们知道数组一旦定义长度以后就限制了所要存储的元素个数,假如我们要存储超过数组长度的元素,就会导致超出数组范围写入数据的现象发生,也就是数组越界。为了保证数组动态存储过程中不会越界。利用C++的类可以定义一种更安全、功能强的数组类型。为此,为该类定义重载运算符[]。
二 示例代码及结果输出
2.1 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| #include<iostream> using namespace std; class A{ private: int length; char *size; public: A(int l){length=l;size=new char[length];} ~A(){delete []size;} int GetLength(){return length;} char&operator[](int i) { if(i>=0&&i<length) { return size[i]; }else { cout<<"\n超出范围。 "; return size[length-1]; } } }; using namespace std; int main() { A a(6); char *ch="hello12"; for(int i=0;i<8;i++) { a[i]=ch[i]; } cout<<endl; for(int i=0;i<8;i++) { cout<<a[i]; } return 0; }
|
2.2 输出结果
1 2 3 4 5 6
| 超出范围。 超出范围。 hello 超出范围。 超出范围。
|
2.3 说明
- 所以我们就可以在调用函数的同时传递一个下标值来达到输出该下标的数组元素的目的
2.4 注意事项
在重载下标运算符函数时应该注意:
- 由于函数的参数即是数组的下标,因此该函数只能带一个参数,不可带多个参数
- 由于下标运算符函数只限于本类的对象使用,因此不得将下标运算符函数重载为友源函数,且必须是非static类的成员函数