2016-07-22 3 views
1

Мне нужно написать класс IntArray, который по существу представляет собой массив с несколькими дополнительными функциями (не показан). Я должен использовать перегрузку оператора для назначения элементов массиву целых чисел внутри объекта IntArray. Моя программа правильно извлекает элементы в массиве, но не может назначать элементы в массиве.Как правильно перегрузить оператор '=' для работы с массивом, который перегружает оператор []?

#include <iostream> 
using namespace std; 

class IntArray{ 
    int *data; 
    int SIZE; 
    int startIndex; 
    int endIndex; 
public: 
    IntArray(int endI); 
    int operator[](int index); 
    void operator=(int i); 
}; 

IntArray::IntArray(int endI){ 
    SIZE = endI; 
    data = new int[SIZE]; 
    endIndex = endI - 1; 
    startIndex = 0; 
} 

int IntArray::operator[](int index){ 
    if(index > endIndex){ 
     cout << "Error: Index out of bounds" << endl; 
     exit(0); 
    } 
    return data[index]; 
} 

void IntArray::operator=(int i){ 
    data[0] = i; 
} 

Я предполагаю, что проблема лежит в пределах этой функции:

void IntArray::operator=(int i); 

Вот мой основной метод:

int main(){ 
    IntArray a(0,1); 
    cout << a[0] << endl; //works fine 
    a[0] = 3; //does not work 
} 

Я также не уверен, как получить доступ к индексу массива (далее « 0 'на третьей строке main()) из функции operator = (int i). Спасибо за помощь!

+0

_'return data [index - startIndex]; '_ Huh ??? –

+0

Я не думаю, что вы хотите использовать operator = в классе массива. См. Http://stackoverflow.com/questions/3581981/overloading-the-c-indexing-subscript-operator-in-a-manner-that-allows-for-r –

+0

Как правило, полезно возвращать 'IntArray &' средствами из 'return (* this)'. И под «Невозможно назначить» вы имеете в виду крах, или вы имеете в виду, что это не так? – M4rc

ответ

5

a [0] = 3; // не работает

Это не может компилироваться, не имеет ничего общего с operator= перегрузкой. Проблема заключается в int operator[](int index);

Ваша перегрузка operator[] возвращает int, так a[0] возвращает RValue, и вы не можете назначить на RValue.

Решения:

int& operator[](int index);

Таким образом, operator[] возвращает ссылку (int&), который является именующим, и вы можете назначить на него.

+0

вы настоящий mvp –

Смежные вопросы