重载数组下标操作符,使用operator

    数组在类的定义中确定好了长度之后,就会限制所要存储的元素的个数,假如我们要存储的元素的个数超过了已确定的数组的长度,那么就会导致数组越界。故最好的办法就是在创建对象的时候才确定要存储元素的个数,即数组的长度,而不是在数组定义的时候。

    此时,可采用重载数组下标操作符[]函数来解决,即创建一个char& A::operator[](int i);函数,i为创建对象数组传过来的下标值。具体例子如下:

#include <iostream>
using namespace std;
class A
{
private:
 int length;
 char* Size; //定义指向char类型数组的的空间的指针
public:
 A(int l)
 {
  length=l;
  Size=new char[length];//在堆中开辟新空间,保存char类型数组,长度为length(此长度在创建对象时确定),
  //该空间的地址赋给成员指针变量Size
 }
 ~A(){delete [] Size;}
 int GetLength(){return length;}
 char& operator[](int i);//声明下标操作函数operator[],i为对象数组传过来的下标值
 //用 [] 取值,并通过 [] 修改原来的元素,所以要通过引用返回的就是 size[] 本身的一个元素。
};
char& A::operator [](int i)
{
 if(i>=0&&i<=length)
  return Size[i];
 else
 {
  cout<<"\n超出范围!\n";
  return Size[length-1];
 }
}

#include <iostream>
#include "demoClass_1.h"
using namespace std;
//使用operator[]下标函数的优点:(1)不用将数组的长度定义为一个常量;(2)可避免数组越界。
//注意点:(1)由于下标运算符函数的参数是数组的下标,因此该函数只能带一个参数,不可带多个参数;
//(2)由于下标运算符函数只限于本类的对象使用,因此不得将下标运算符函数重载为友元函数,且必须是非static成员函数。
int main()
{
 A a(6);
 char* ch="helloEV";
 for(int i=0;i<8;i++)
 {
  a[i]=ch[i];//每循环一次,将ch中的一个字符赋给对象a的char型数组,
  //赋值符左边的a[i]==a.operator[](i),即调用重载构造函数,i是下标值。
  //如果i不超过堆中创建的char型数组长度,
  //那么返回char型数组的第i个元素;如果超过,则返回该数组的最后一个元素。

  cout<<"第"<<i+1<<"次循环:"<<a[i]<<endl;
 }
 cout<<"\n";
 for(int j=0;j<8;j++)
  cout<<a[j]<<endl;
 cout<<"\n";
 cout<<a.GetLength()<<endl;
}

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值