C++下标运算的重载为什么要加&

来源:百度知道 编辑:UC知道 时间:2024/05/15 07:32:28
#include<iostream.h>
class chara
{
int lh;
char*bu;
public:
chara(int i)
{
lh=i;
bu=new char[i];
}
~chara()
{
delete bu;
}
int getlh()
{
return lh;
}
char&operator[](int q)//为什么有时重载其它运算符,不加“&"
{
static char nu=0;
if(q>=0&&q<lh)
return bu[q];
else
{
cout<<endl<<"超出范围";//nu[q]=nu;
return nu;
}
}
};
void main()
{
chara good(7);
char *bad="example";
for(int i=0;i<10;i++)
good[i]=bad[i];
cout<<endl;
for(i=0;i<10;i++)
cout<<good[i];
cout<<endl<<good.getlh()<<endl;
}

char&operator[](int q)//为什么有时重载其它运算符,不加“&"

重载下标运算符一定要返回引用,因为这样才能改变下标对应元素的值

如果不返回引用
arr[1] = 1;
就不会改变arr[1]的值。事实上,该语句是非法的,因为arr[1]是一个常量性质的元素,不可以赋值。