6 1. Klasy, obiekty, dziedziczenie
rżeniu obiekt typu semafor_bin powinien być w stanie wolny. Klasa semafor_bin powinna udostępniać następujące publiczne metody:
— rezerwuj, której wywołanie zmienia stan semafora z wolny na zajęty (w przypadku, gdy semafor jest już w stanie zajęty, metoda nie powinna zmieniać jego stanu),
zwolnij, której wywołanie zmienia stan semafora z zajęty na wolny (w przypadku, gdy semafor jest już w stanie wolny, metoda nie powinna zmieniać jego stanu),
— stan zwracającą wartość true gdy semafor jest w stanie wolny i false w przeciwnym wypadku.
Wszystkie pola klasy semafor_bin powinny być prywatne.
1.39 Napisz klasę semafor, której obiekty mogą przyjmować stany ze zbioru {0,1,... ,n — 1}, gdzie n jest argumentem konstruktora. Bezpośrednio po utworzeniu obiekt typu semafor powinien być w stanie 0. Klasa semafor powinna posiadać następujące publiczne metody:
semafor (unsigned int n) konstruktor, inicjujący obiekt, który może przyjmować stany ze zbioru {0,1,..., n — 1},
— bezargumentowy konstruktor, inicjujący obiekt, który może przyjmować stany ze zbioru {0,1},
— rezerwuj, której wywołanie zwiększa wartość stanu semafora o jeden (w przypadku, gdy semafor jest w stanie o maksymalnej wartości metoda nie powinna niczego robić),
— zwolnij, której wywołanie zmniejsza wartość stanu semafora o jeden (w przypadku, gdy semafor jest w stanie 0, metoda nie powinna niczego robić),
stan zwracającą wartość true gdy semafor nie osiągnął jeszcze maksymalnej wartości stanu i false w przeciwnym wypadku.
Wszystkie pola klasy semafor powinny być prywatne.
1.40 Popraw klasę semafor z zadania 1.39 w taki sposób, żeby pamiętała identyfikatory procesów rezerwujących zasoby przy pomocy obiektów tej klasy. W tym celu metody rezerwuj i zwolnij powinny mieć cał-kowitoliczbowy argument id, w którym będą otrzymywać identyfikator procesu rezerwującego/zwalniającego zasób. Poprawiona klasa powinna ponadto posiadać publiczną metodę wypisz wypisującą na standardowym wyjściu identyfikatory procesów, które w danym momencie posiadają rezerwację zasobu.
1.41 Napisz klasę macierz, służącą do przechowywania macierzy kwadratowych liczb wymiernych. Klasa macierz powinna zawierać:
— publiczne pole tab, zawierające wskaźnik do macierzy,
— publiczne pole n, zawierające rozmiar macierzy,
— konstruktor, kóry dostaje w argumencie dodatnią liczbę całkowitą n i tworzy macierz o wymiarach n x n,