c++(重载[]运算符)

本文介绍了C++中如何通过重载[]运算符来实现对象数组的操作,特别是进行越界检查。通过创建一个intarray类,详细阐述了重载函数的实现,包括其接收int类型常引用作为下标参数,以及返回int类型的引用以支持赋值操作。通过测试程序验证了重载[]运算符的功能。

c++支持重载[]符,这样就可以像操作普通数组一样操作对象数组

下面创建一个intarray数组类,实现对数据下标的越界检查。

class IntArray
{
private:
    int *aptr;
    int arraySize;
    void memError();    //处理内存分配错误
    void subError();    //处理下标越界

public:
    IntArray(int);
    IntArray(const IntArray &);
    ~IntArray();

    //返回对象元素个数
    int size(){return arraySize;}

    //重载[]运算符
    int &operator[](const int &);
};

主要关注其[]运算符的重载函数:

/*
** 重载[]运算符
** 参数:数组下标
** 返回值:数组元素的引用
*/
int &IntArray::operator[](const int &n)
{
    //检查下标是否越界
    if(n<0 || n>arraySize)
        subError();
    //返回string对象的数组元素
    return aptr[n];
}

说明:

  • 该函数的形参是一个int类型的常引用,表示数组的下标。如果table是一个intarray类的对象,那么table[12]就是将12传递给参数n。

  • 该函数返回一个int类型的引用,是因为该函数有时会出现在等号的左边table[12] = 50;  赋值运算符=的左边必须代表一个可修改的内存空间,比如变量,但是不能是一个常量。上式其实就相当于:*(aptr + 12) = 50

  • 由于该重载函数返回一个整型元素(实际上是它的一个引用),因此intarray类不需要重载关系运算符和算术运算符,即可直接使用。

主函数测试程序:

#include <iostream>
using namespace std;
#include "intArray.h"

int main()
{
    cout << "string类对象的[]运算符重载函数测试" << endl;
    IntArray table(10);

    int x;
    //每个元素赋值
    for(x=0; x<table.size(); x++)
        table[x] = x;
    //输出各个元素
    for(x=0; x<table.size(); x++)
        cout<<table[x]<<" ";
    cout<<endl;

    //使用系统提供的++运算符操作数组元素
    for(x=0; x<table.size(); x++)
        table[x]++;
    //输出各个元素
    for(x=0; x<table.size(); x++)
        cout<<table[x]<<" ";
    cout<<endl;

    //测试下标越界访问
    table[11] = 0;

    return 0;
}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值