Proszę napisać klasę do obsługi macierzy. Klasa musi posiadać:
- konstruktor jednoargumentowy, tworzący macierz o wymiarze n*n
- konstruktor dwuargumentowy, tworzący macierz o wymiarze m*n
Dla uproszczenia można założyć, iż maksymalny rozmiar macierzy wynosi 3*3
W klasie proszę zdefiniować następujące operatory (przy czym wektor należy rozumieć jako macierz, której jeden z wymiarów wynosi 1):
+ | dodawanie macierzy |
---|---|
- | odejmowanie macierzy |
* | mnożenie macierzy |
, | iloczyn skalarny wektorów |
[] | indeksowanie wektora |
() | indeksowanie macierzy |
! | transpozycja macierzy |
== oraz != | porównywanie macierzy |
W przypadku braku możliwości wykonania danej operacji (czyli np. dodawanie do siebie dwóch macierzy o różnych wymiarach) działanie operatora jest niezdefiniowane.
Funkcje operatorowe mogą być metodami lub funkcjami globalnymi. W programie każdy z tych rodzajów musi być użyty przynajmniej jeden raz.
Zmieniono operator iloczynu skalarnego:
Było: ()
Jest: ,
Uzasadnienie - () jako operator iloczynu skalarnego nie miało sensu - wymagałoby użycia kodu typu:
Macierz m,n;
double s;
s = m ( n ) ; // iloczyn skalarny
Zamiast tego proszę przeciążyć operator ","
Macierz m,n;
double s;
s = (m,n); // iloczyn skalarny
nawiasy w tym przypadku określają tylko kolejność działań (normalnie "=" ma wyższy priorytet niż ",")