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();
*/
}