[C++] przeciążanie, &operator[]

0

Witam,
Klasa poniżej imituje standardową tablice.
Przeciążyłem operator[] aby umożliwić przypisywanie wartości (int& operator[]) bezpośrednio do właściwej tablicy.

Rzecz w tym, że gdy dynamicznie alokuję pamięć dla tego obiektu (kod zakomentowany) wywoływany jest przy przypisaniu (heap[indeks]=int) konstruktor klasy (destruktor na dobrą sprawę też - sprawdzałem gdb) a nie funkcja 'int& operator[]'.

Gdy deklaruję obiekt jako statyczny (kod nie-zakomentowany) wszystko działa jak należy.

 
#include <iostream>
#include <cstdlib>
using namespace std;

class darray {
	public:
		int *array;
		int len;

		darray(int l) { 
			array = new int[l+1]; 
			len = l;
			for(int i=0;i<=l;i++) array[i]=0;
		}

		int operator[](int i) const{ return array[i]; }
		int& operator[](int i) { return array[i]; }

		void fill_random(int range=100) { srand(time(NULL)); for(int i=1;i<=len;i++) array[i]=rand()%range; } 
		void print() { cout << endl;for(int i=1;i<=len;i++) cout << array[i] << " " ; cout << endl;}
		~darray() { delete (array); }
};
int main(int argc, char **argv) {
	class darray heap(10);

	heap.fill_random();

	heap.print();
	heap[1]=1;
	heap[2]=2;
	heap[3]=3;

	heap.print();

/*
  class darray *heap;
	heap = new darray(10);
	heap->fill_random();
	heap->print();
	
	heap[1]=1;
	heap[2]=2;
	heap[3]=3;

	heap->print();
*/
	
}

0

Przeładowałeś operator dla obiektu klasy .
A tu 'heap' jest wskaźnikiem.
Powinno być :

 darray *heap;
        heap = new darray(10);
        heap->fill_random();
        heap->print();

       (*heap)[1]=1;
       (*heap)[2]=2;
       (*heap)[3]=3;

        heap->print();

Edit
Albo jawnie wskaźnikiem:

        heap->operator[](1)=1;
        heap->operator[](2)=2;
        heap->operator[](3)=3;

Błędy :

 ~darray() { delete (array); }

Powinno byc :

 ~darray() { delete [] array ; }

Błędy w indeksowaniach pętli , polecam ustawienie' i = 0' i 'i < l' ..

0

Dzięki uprzejme.

1 użytkowników online, w tym zalogowanych: 0, gości: 1