napisałem sobie listę, która to będzie przedstawiać jakąś macierz.
Żeby się sprawnie można było po całości poruszać wpadłem na pomysł, żeby sobie przeciążyć operator indeksowania. Problem jednakowoż polega na tym, że macierze mają nie jeden a dwa wymiary, więc potrzebuję dwóch operatorów [][].
ja więc funkcję tego typu :
int & operator[](int id)
{
return id;
}
zamienić, żeby przyjmowała 2 operatory indeksowania?
Jakaś strasznie skomplikowana ta twoja macierz. Nic z niej nie rozumiem.
Moja jest chyba trochę lepsza i bardziej zrozumiała:
{ public: class Row { private: unsigned int width; double *numbers; public: Row(); (const unsigned int x) ~Row() double operator[](const unsigned int x) const; }; : unsigned int width, height; Row *rows; : Matrix(); Matrix(const unsigned int y, const unsigned int x); ~Matrix(); Row operator[](const unsigned int y) const;
Ciał konstruktorów i operatorów Ci nie podam, bo to by było niezbyt edukacyjne.
Mogę tylko podpowiedzieć, że w konstruktorach używany jest "new".
Nie wiem czy jest dobrym pomysłem trzymać macierz w kawałkach. W mojej wersji wszystko jest w jednej tablice. Row - to tylko wirtualny twór który pozwala zapamiętać referencje na macierz oraz numer wiersza, który istnieje tylko po to aby móc używać nawiasów kwadratowych.
Z tym że dla macierzy możemy przeciążyć dwa operatory:
const double &Macierz::operator()(unsigned x,unsigned y) const; // tylko do odczytu dla stałych