我正在尝试超载订阅运营商并面临一些问题 例如,我的班级是 E ,我最初做的是:
int E::operator[](int n){
if(n<length && n>0)
return data[n];
else
return 0;
}
假设我有一个 E (A)的对象,我想返回A [0]。这个运算符工作正常
我想要做的第二件事就是如果我想做A[0] = 4
。
我需要在这里实施什么?赋值运算符?或订阅运营商?
我想知道如何做到这一点,谢谢!
答案 0 :(得分:2)
您需要返回对元素的引用,即
int& E::operator[](size_t n)
{
if ( n >= length)
throw std::out_of_range("Index out of range");
return data[n];
}
答案 1 :(得分:1)
通常,下标运算符写有两个重载:一个用于读取,一个用于写入。这允许您读取const上下文:
int& E::operator[](size_t index)
{
if( index >= lenght )
throw std::out_of_range("Subscript out of range");
else
return data[n];
}
int E::operator[](size_t index) const
{
if( index >= lenght )
throw std::out_of_range("Subscript out of range");
else
return data[n];
}