Witam, piszę z następującym problemem. Piszę program obsługujący działania na macierzach. Natrafiłem na pewien problem, a dokładnie najprawdopodobniej na problem związany ze zwracaniem obiektu. Poniżej wklejam przeciążone operatory + i *:
Macierz& operator=(const Macierz& M)
{
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
tab[i][j] = M.tab[i][j];
}
return *this;
}
Macierz& operator *(const Macierz& m)
{
Macierz M;
M.tab[0][0] = (m.tab[0][0] * tab[0][0]) + (m.tab[0][1] * tab[1][0]);
M.tab[0][1] = (m.tab[0][0] * tab[0][1]) + (m.tab[0][1] * tab[1][1]);
M.tab[1][0] = (m.tab[1][0] * tab[0][0])+ (m.tab[1][1] * tab[1][0]);
M.tab[1][1] = (m.tab[1][0] * tab[0][1])+ (m.tab[1][1] * tab[1][1]);
return M;
}
Problem pojawia się gdy w main chcę wykonać operacje np:
int main()
{
// ... wcześniejsza deklaracja wartości w macierzach
// C A B - macierze
C = (A * B);
// ... reszta kodu
return 0;
}
W tym momencie powstaje błąd i program przestaje działać. Zauważyłem, że problem polega na zwracaniu obiektu przez operator*. Gdy lekko zmienię kod do postaci :
Macierz& operator *(const Macierz& m)
{
tab[0][0] = (m.tab[0][0] * tab[0][0]) + (m.tab[0][1] * tab[1][0]);
tab[0][1] = (m.tab[0][0] * tab[0][1]) + (m.tab[0][1] * tab[1][1]);
tab[1][0] = (m.tab[1][0] * tab[0][0])+ (m.tab[1][1] * tab[1][0]);
tab[1][1] = (m.tab[1][0] * tab[0][1])+ (m.tab[1][1] * tab[1][1]);
return *this;
}
(znam definicje this, wiem jak on działa)
wszystko zaczyna działać poprawnie lecz zmianie ulegają również wartość macierzy A. Czy mógłby ktoś pomóc, wesprzeć dobrą radą jak rozwiązać ten problem ?? ( podkreślam ja się jeszcze uczę :D) Dzięki wszystkim za pomoc :D