C++ 如何使用重载运算符[]为左侧赋值?
我制作了以下代码:-C++ 如何使用重载运算符[]为左侧赋值?,c++,operator-overloading,C++,Operator Overloading,我制作了以下代码:- 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 ){
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;
}
A类{
bool-bFlag[2];
公众:
(){
对于(int i=0;i<2;i++)
bFlag[i]=假;
}
布尔运算符[](int r){//我知道如何使用运算符[]为r.H.S赋值
如果(r>=0 | | r<2){
bFlag[r]=真;
返回bFlag[r];
}
返回false;
}
};
int main(){
obj;
布尔x;
x=obj[0];//这我知道
//obj[1]=x;//我怀疑怎么做?
返回0;
}
我不知道如何使用运算符[]
将值设置为L.H.S
。
请指导我如何将
x
值设置为obj[1]
使用[]
作为左值,重载的[]
应通过引用返回
可以将引用返回给私人成员吗?是的,非常好。
如果您看到STL,大多数STL类都会这样做。
规则是您应该向您的私人成员返回一个
const
引用。如果您不希望用户修改其中的内容,或者如果您希望允许用户修改内容,您可以返回一个非const
引用
通过将类的详细信息设置为私有,基本上可以对类的用户隐藏(抽象)类的详细信息,但仍然提供了能够修改单个元素的功能。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];
}
};
但是这里
bFlag
是一个私有数据成员。我们可以引用私人数据成员吗?abhineet,回答您的评论:“是的”:-)非常感谢。这是我的下一个疑问,在那之前你已经给出了答案。