Mając do dyspozycji tylko standardowe przeładowanie operatora indeksowania [], wywołując obiekt klasy Matrix np.:
Matrix obj;
cout << obj[0]; // Wypisuje element 0,0
cout << obj[1]; // Wypisuje element 1,0
cout << obj[2]; // Wypisuje element 2,0
// itd...
Ale napisałem coś takiego:
class helpM
{
private:
double *macierzH;
public:
helpM(int k, double* t)
{
macierzH = new double[k];
for (int i = 0; i < k; i++)
macierzH[i] = t[i];
}
~helpM()
{//Zwalnianie pamieci
}
double operator[](const int index2)
{
return macierzH[index2];
}
};
double Matrix::operator [](const int index)
{
helpM oH(kolumny, macierz[index]);
return oH[index];
}
Czyli napisałem druga klasę, gdzie również zrobiłem przeładowanie, działa to tak:
Mamy przeładowanie operatora [] dla klasy Matrix,
- w tym przeładowaniu tworzymy obiekt klasy helpM, w którym zostaje utworzona tablica ale już 1W składająca się z wiersza (numer z indexu) tablicy z klasy Matrix
- w drugiej klasie helpM również przeładowuje operator w którym zwracam element index2 tej tablicy 1W,
Niestety nie działa tak jakbym chciał, nadal nie mogę wywołać obiektu klasy Matrix z dwoma operatorami indeksowania. Ale przy wywołaniu jednego nie bierze już kolejno 0,0; 1,0 itd elementu tablicy 2W ale 0,0; 1,1; 2,2 itd..
Czyli chyba jest progres. Ktoś ma jakieś pomysły w jaki sposób to jeszcze mogę rozegrać? Jak poprawić mój kod, czy jest w ogóle sens poprawiania tego kodu czy nie ma on zupełnie sensu.