[cpp] przeciążenie operatora [][]

0

Piszę klasę, która zawiera w sobie tablicę 2 wymiarową. W jaki sposób przeciążyć operator żebym mógł się do tej klasy odnosić jak do tablicy? Czy samo przeciążenie operatora jednowymiarowego spełni zadanie? W końcu tablica 2 wymiarowa to tablica tablic jednowymiarowych. Czy ktoś mógłby mnie oświecić jak to zrobić?

0

Jezeli to tablica 2 wymiarowa to wystarczy przeciazenie [] i zwracanie pierwszego wymiaru. Przykladowo

char** tablica;

char* operator[](int i) {return tablica[i];)

Czyli operator zwraca wskaznik, ktory rowniez podlega operatorowi []. Dzieki temu mozesz napisac pozniej [][] - pierwsze [] zwraca wskaznik i do tego stosuje sie drugie [].

Z tymze mozesz pozniej sobie zrobic z tym wskaznikiem co chcesz ;)

0

Bardziej zaawansowana metoda to pierwszy operator zwraca obiekt (lub referencję do niego) takiego typu, który również ma przeciążony operator []. W zasadzie jest to uogólnienie powyższej metody.

Innym rozwiązaniem jest zastosowanie innego operatora, a dokładniej:

class TTwojaKlasa
{
public:
    TJakisTyp & operator()(int i,int j);
};

Takie podejście jest bardziej wydajne, zwłaszcza, że ten operator może przyjmować dowolną liczbę argumetów.

0
MarekR22 napisał(a)

Takie podejście jest bardziej wydajne, zwłaszcza, że ten operator może przyjmować dowolną liczbę argumetów

Bardziej wydajne, ale mniej intuicyjne, bo niezgodne z naszymi przyzwyczajeniami korzystania z tablic :P

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