-1

我正在尝试重载订阅运算符并面临一些问题
,例如我的课程是E,我最初所做的是:

int E::operator[](int n){
    if(n<length && n>0)
        return data[n];
    else
        return 0;

}

假设我有一个E ( A ) 的对象,我想返回 A[0]。该运算符工作正常。
我想做的第二件事是如果我想做A[0] = 4
我需要在这里实施什么?赋值运算符?还是订阅运营商?
我想得到一些建议如何做到这一点,谢谢!

4

2 回答 2

2

您需要返回对元素的引用,即

int& E::operator[](size_t n)
{
   if ( n >= length)
      throw std::out_of_range("Index out of range");
   return data[n];
}
于 2013-07-31T07:50:00.667 回答
1

通常下标运算符有两个重载:一个读,一个写。这允许您在 const 上下文中阅读:

写重载:

int& E::operator[](size_t index)
{
    if( index >= lenght )
        throw std::out_of_range("Subscript out of range");
    else
        return data[n];
}

读取重载:(注意是 const cualified)

int E::operator[](size_t index) const
{
    if( index >= lenght )
        throw std::out_of_range("Subscript out of range");
    else
        return data[n];
}
于 2013-07-31T08:40:58.720 回答