2016-07-22 4 views
1

필자는 본질적으로 몇 가지 추가 기능이있는 배열 인 IntArray 클래스를 작성해야합니다 (표시되지 않음). 연산자 오버로딩을 사용하여 요소를 IntArray 객체 내의 정수 배열에 할당해야합니다. 내 프로그램은 배열의 요소를 제대로 검색하지만 배열의 요소를 할당 할 수는 없습니다.'='연산자를 과부하하는 배열로 작업하려면 '='연산자를 제대로 오버로드합니까?

다음
void IntArray::operator=(int i); 

내 주요 방법입니다 :

#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; 
} 

나는 문제가이 함수 내에있는 가정 나는 또한 배열 인덱스에 액세스하는 방법을 잘 모르겠습니다

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

합니다 (' 연산자 (int i) 함수에서 main()의 세 번째 줄에 '0'을 추가합니다. 도와 주셔서 감사합니다!

+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[] 과부하가 a[0]이를 rvalue를 반환하므로, int 반환에 문제가있다, 당신은를 rvalue에 할당 할 수 없습니다.

솔루션은 다음과 같습니다

이런 식으로

int& operator[](int index);

operator[] 좌변 인 참조 (int&를) 반환, 당신은 그것에 할당 할 수 있습니다.

+0

당신은 진짜 mvp입니다 –

관련 문제