C++ [] = 运算符重载,终于静心试了一下,以前都是拷贝了修改…………不知所以
程序员文章站
2022-05-23 09:26:42
...
之前一直困惑或者畏惧的运算符,今天算是做了一个初步的了解。
做了一个分段数组的数据类,里面包含若干段数据,但是序号不是连续的,为了方便快速使用[],查到数据值,最好的办法就是重载[]运算符。
找了些按理,都没有解释清楚,写法的具体含义。
class Data
{
public:
std::vector<std::vector<unsigned>> data ;
unsigned& operator[](unsigned idx)// ()里表示[]里传递的数据类型和值idx.
//返回类型表示原变量带着中括号时的类型
{
return *(GetDataPtr(idx));//表示返回的内容。如果是为了访问,建议使用引用或者指针,这样可以修改掉内部的值,否则会被丢弃。跟函数的意义一样。
}
unsigned operator=(unsigned data)// ()里表示等号右边的数据类型和值data.
//返回类型unsigned,表示等号左边要接受的数据类型。
{
return data ;//表示等号左边获取到的数据值data.
}
}
第一个 [] 运算符重载。
如果写成
Data x;
//初始化,增加一些数据段。每段固定100个索引,实际可能只有小于100的数。为了省空间。
x[0]=23; 此时就用到了重载运算符[]和=; 表示x[0]被赋值为23;
重载之前,x[0]是不允许的。
被23赋值也是不允许的。默认只能相同类型的赋值。
这样一来,就可以当做普通数组看待了,只是内部把一些用不到的空间省掉了。
对外不可见。