学科分类
目录
C++基础

下标运算符重载

我们经常使用“[]”来访问数组中的元素,为了在类中也方便使用“[]”运算符,可以在类中重载这个运算符。重载“[]”运算符可以实现两个目的:

(1)“对象[下标]”的形式类似于“数组[下标]”,更加符合习惯。

(2)可以对下标进行越界检查。

重载下标运算符的一般格式如下所示:

返回类型 operator[] (参数列表);

上述格式中,“[]”运算符重载函数有且只有一个参数,表示下标值,通常为整型。重载下标运算符时一般把返回值指定为一个引用。

为了让读者加深理解,接下来通过一个案例来实现下标运算符的重载,具体代码如例1所示。

例1

 1    #define _CRT_SECURE_NO_WARNINGS
 2    #include <iostream>
 3    using namespace std;
 4    class Array
 5    {
 6    private:
 7        int size;
 8        char* buf;
 9    public:
 10        Array(int n);
 11        Array(char* src);
 12        ~Array()
 13        {
 14            delete[]buf;
 15        }
 16        char& operator[](int n);
 17        void show()
 18        {
 19            for (int i = 0; i < size; i++)
 20            {
 21                cout << buf[i];
 22            }
 23            cout << endl;
 24        }
 25    };
 26    //类成员函数的实现
 27    Array::Array(int n)
 28    {
 29        size = n;
 30        buf = new char[size + 1];
 31        *(buf + size) = '\0';
 32    }
 33    
 34    Array::Array(char* src)
 35    {
 36        buf = new char[strlen(src) + 1];
 37        strcpy(buf, src);
 38        size = strlen(buf);
 39    }
 40    
 41    char& Array::operator[](int n)
 42    {
 43        static char ch = 0;
 44        if (n > size || n < 0)  //检查数组是否越界
 45        {
 46            cout << "out of the bound" << endl;
 47            return ch;
 48        }
 49        else
 50            return *(buf + n);
 51    }
 52    int main()
 53    {
 54        Array arr1(20);
 55        for (int i = 0; i < 20; i++)
 56        {
 57            arr1[i] = 65 + i;  //调用[]运算符重载函数赋值
 58        }
 59        arr1.show();
 60    
 61        Array arr2("chuan zhi bo ke!");
 62        cout << arr2[6] << endl;
 63        arr2[6] = 'A';
 64        arr2.show();
 65        system("pause");
 66        return 0;
 67    }

运行结果如图1所示。

图1 例1运行结果

例1定义一个字符数组类,并重载了[]运算符,在构造arr1对象时,指定了数组大小,然后通过“[]”运算符来给数组赋值,由图1所知,赋值成功。而在构造arr2对象时,由一个字符串直接创建一个数组,然后调用“[]”运算符重载函数读取某一个字符元素,并且可以对字符元素进行修改。

注意:“[]”运算符也只能重载为类的成员函数。

点击此处
隐藏目录