Assignment Operator和Array Subscription运算符的问题

时间:2013-07-31 07:46:36

标签: c++ operator-overloading

我正在尝试超载订阅运营商并面临一些问题 例如,我的班级是 E ,我最初做的是:

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

}

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

2 个答案:

答案 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];
}