在 C++ 中,在重载下标运算符 “[ ]” 时,认为它是一个双目运算符,例如 X[Y] 可以看成:
[ ]-----双目运算符;
X-----左操作数;
Y-----右操作数。
其相应的运算符重载函数名为 operator[ ]。
假设 X 是某一个类的对象,类中定义了重载“[ ]”的 operator[ ] 函数,则表达式:
X[Y];
可被解释为:
X.operator[](Y);
下标运算符重载函数只能定义成员函数,其形式如下:
返回类型 类名::operator[ ] (形参){
//函数体
}
注意:形参在此表示下标,C++ 规定只能有一个参数。
例 1:使用下标运算符重载函数的例子
#include<iostream>
using namespace std;
class Vector4{
private:
int v[4];
public:
Vector4(int a1,int a2,int a3,int a4){
v[0]=a1;v[1]=a2;v[2]=a3;v[3]=a4;
}
int &operator[](int bi); //声明下标运算符 [] 重载函数
};
int &Vector4::operator[](int bi){ //定义下标运算符 [] 重载函数
if(bi<0||bi>=4){ //数组的边界检查
cout<<"Bad subscript!\n";
exit(1);
}
return v[bi];
}
int main(){
Vector4 ve(0,1,2,3);
cout<<ve[2]<<endl; //ve[2] 相当于 ve.operator[](2)
ve[3]=ve[2];
cout<<ve[3]<<endl;
ve[2]=22;
cout<<ve[2];
return 0;
}
说明:
重载下标运算符“[ ]”时,返回一个 int 型的引用,可使重载的“[ ]”用在赋值语句的左边,因而在 main 函数中,ve[i] 可以出现在赋值运算符的任何一边,使编程更灵活。