Zaprojektuj klasę, która posłuży do tworzenia obiektów reprezentujących macierze przechowujące liczby rzeczywiste.
Klasa macierz
posiada pola do zarządzania dwuwymiarową, dynamiczną tablicą reprezentującą komórki macierzy. Wszystkie pola są prywatne.
Posiada trzy konstruktory:
- domyślny, inicjalizujący wszystkie pola tak, aby powstała macierz o wymiarach 1 na 1; w tym przypadku nie powinny być alokowane żadne dodatkowe zmienne dynamiczne,
- konstruktor z argumentami opisującymi wymiary macierzy; wymiary mogą być dowolne większe od zera. Pamięć pod komórki macierzy powinna być alokowana dynamicznie. Przy okazji działania tego konstruktora przetestuj, jakie są górne granice dostępnej pamięci w twoim komputerze, tj. podając coraz większe wymiary macierzy doprowadź do sytuacji, kiedy alokacja pamięci w końcu nie powiedzie się. Zapisz uzyskane wartości graniczne, będą potrzebne na wejściówce,
- konstruktor kopiujący, który utworzy drugą macierz identyczną co do rozmiaru i zawartości.
oraz destruktor, który zwalnia dynamicznie zaalokowane zasoby.
Posiada też seter i geter do komórek macierzy. Obydwie metody powinny kontrolować poprawność argumentów wejściowych, tj. czy współrzędne żądanej komórki mieszczą się w dozwolonych granicach.
Dodatkowo posiada metodę, która realokuje rozmiar macierzy, tj. powiększa jej rozmiar lub pomniejsza. W przypadku pomniejszenia, część informacji zapisanej w komórkach macierzy jest tracona. W przypadku powiększenia nowo dodane komórki są zapełnianie wartością domyślną (dowolnie ustaloną).
Napisz prosty program testujący działanie wszystkich konstruktorów, destruktora i metod klasy macierz
. Utwórz obiekt z wykorzystaniem konstruktora domyślnego. Utwórz drugi obiekt reprezentujący macierz o dowolnym rozmiarze i zainicjuj go wartościami losowymi z przedziału (-1,1) (użyj do tego setera). Utwórz trzeci i czwarty, obydwa będące kopiami odpowiednio pierwszego i drugiego obiektu. Porównaj zawartość komórek miedzy oryginałami i kopiami (użyj do tego getera).