ale nie wiem czy to o to chodzi, bo kompletnie nie rozumiem tego zapisu. dlaczego przeciazajac ()
jest &
, a nie *
?
tam nie może być *
bo zwracasz pojedynczy element z macierzy return macierz[k][n]
typu int
. Można ją zwrócić jako wartość int
albo referencję int&
, dzięki temu da się zrobić alias do konkretnego elementu macierzy (czy to będzie w ogóle przydatne?):
#include <iostream>
using namespace std;
struct M {
int* operator[](int i) {
return macierz[i];
}
int& operator()(int i, int j) {
return macierz[i][j];
}
int macierz[3][3];
};
int main() {
M m{11, 12, 13, 21, 22, 23, 31, 32, 33};
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
cout << m[i][j] << " ";
}
cout << endl;
}
cout << endl;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
cout << m(i, j) << " ";
}
cout << endl;
}
cout << endl;
int& a = m(1,1); // referencja do elementu w macierzy;
cout << "address(a) = " << &a << endl;
a = 1111;
cout << "m.macierz[1][1] = " << m.macierz[1][1] << endl; // powinno zawierać 1111
cout << "address(m.macierz[1][1]) = " << &m.macierz[1][1] << endl; // adres taki sam jak "a"
return 0;
}