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ć?
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 ;)
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.
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