我制作了以下代码: -
class A{
bool bFlag[2];
public:
A(){
for(int i = 0; i < 2; i++)
bFlag[i] = false;
}
bool operator[](int r){ //i know how to assign value to R.H.S using operator[]
if( r >= 0 || r < 2 ){
bFlag[r] = true;
return bFlag[r];
}
return false;
}
};
int main(){
A obj;
bool x;
x = obj[0]; //this i know
//obj[1] = x; //how to do this is my doubt?
return 0;
}
我不知道使用L.H.S
将值设置为operator[]
。
请引导我了解如何将x
值设置为obj[1]
答案 0 :(得分:5)
要使用[]
作为左值,您的重载[]
应该通过引用返回。
是否可以返回对私人会员的引用?
是,完全没问题
如果您看到STL,大多数STL课程都会这样做
如果您不希望用户修改其中的内容,或者如果您想允许用户修改它,您可以返回const
引用,则应该向私人成员返回non const
引用。
您基本上通过使类private
从类的用户隐藏(摘要)类的详细信息,但您仍然提供了能够修改单个元素的功能。
答案 1 :(得分:4)
Als是对的,但这是一个例子:
class A{
private:
int val[10];
public:
A(){}
int& operator[](int i) {
return val[i];
}
};
这使得可以做像
这样的事情A a;
a[2] = 2;
你当然应该添加旧方法。优化l值来制作它。
class A{
private:
int val[10];
public:
A(){}
const int operator[](int i) const {
return val[i];
}
int& operator[](int i) {
return val[i];
}
};