Już tłumaczę :)
zwróć uwagę na swój operator:
Tab & operator=(Tab & T);
albo po prostu na funkcję:
void blabla(Tab & T);
cóż to za funkcja jest? Ano to jest funkcja, która pobiera argument przez & (referencję). Oznacza to, że funkcja może (albo nawet chce) modyfikować ten argument swój. Czy każdy argument można tak bezkarnie modyfikować? Ano nie każdy:
Tab zmienna;
const Tab stala_zmienna;
blabla(zmienna); // idzie
blabla(stala_zmienna); // nie idzie! nie można grzebać w obiekcie stałym!
A więc funkcja nie może pobierać obiektów stałych, niemodyfikowalnych. Czy ty jej taki argument dajesz? Ano dajesz. Bo okazuje się, że w C++ uważa się, że obiektów tymczasowych się nie modyfikuje. Są traktowane jako const właśnie. Czyli takie rzeczy nie przejdą:
// zwraca obiekt tymczasowy przez wartość
// taki wynik można czytać, kopiować, przepisać,
// ale do samego wyniku nie można pisać
Tab temp() { return Tab; }
blabla( temp() ); // nie przejdzie
blabla( Tab() ); // podajemy tablicę stworzoną na miejscu - tymczasową, też nie pójdzie
Dobra, czyli zmieniamy na const Tab& - co znaczy, że bierzesz przez referencję, ale zobowiązujesz się nie grzebać w tym, co dostałeś.
Na koniec, co oznacza taka funkcja?
double* Tab::operator[](int i) const {
return !stat ? 0 : t[i];
}
Ano, ona nie nie znaczy, że wynik będzie const. To nasze const po deklaracji oznacza, że nie będziemy w tej metodzie (tutaj: operatorze) robić nic, co by nam zmieniło obiekt. Zwracamy wynik - ten wynik może być wykorzystany w niecnych celach, tego nikt nie obiecuje. Obiecujesz jedynie, że ty nie zrobić nic "złego" w celu zwrócenia wyniku. Tak swoją drogą, to jeszcze ze zwracanym wynikiem jest trochę niuansów (tzn czasem trzeba zwrócić const typ&, zamiast typ&) ale tutaj akurat masz czysto. Jakby się purysta czepiał: wynika to stąd, że twoja ostrożna constowa funkcja traktuje obiekt jako tylko-do-odczytu. I wszystkie składowe obiektu są tylko do czytania. Składowe - a więc na przykład twój wskaźnik double** t. Dokładnie zwróć uwagę, wskaźnik - ale to, na co on wskazuje, to już nie - z tym można robić wszystko, wolna wola. Dlatego możesz wskazywany blok pamięci zwrócić jako double* i nikt nie protestuje.
Późno, po podróży jestem ja, jak coś niejasno, mętnie, dziwnie, to drzeć się, jutro przed południem opiszę może systematyczniej.