Przeciążanie metod i operatorów
Transkrypt
Przeciążanie metod i operatorów
Przeciążanie metod i operatorów Zadanie 1 W programie utwórz klasę Ksiazki. Klasa posiada pola przechowujące informacje o: tytule książki, autorze książki, ilości stron, ilości rozdziałów i cenie (cena powinna być większa od zera, program powinien pobierać cenę tak długo, aż użytkownik poda prawidłową). W klasie powinna znajdować się także stała przechowująca informację o rabacie standardowym (5%). Utwórz konstruktor klasy, który pobierze wartości pól od użytkownika. Utwórz metodę, która obliczy i zwróci cenę książki po rabacie. Przeciąż ją – w liście parametrów uwzględnij rabat podany przez użytkownika. W funkcji Main utwórz obiekt klasy Ksiazki oraz zmienną, która będzie przechowywać rabat podany przez użytkownika. Pobierz rabat od użytkownika. Wyświetl informacje o książce: tytuł, autor, liczba stron, ilość rozdziałów, cena, cena po rabacie standardowym oraz cena po rabacie podanym przez użytkownika. Zadanie 2 W programie utwórz klasę Pracownicy. Klasa posiada pola przechowujące informacje o: nazwisku pracownika, imieniu, płacy zasadniczej oraz rok urodzenia(rok powinna być większa od 1900 i mniejszy od 2000, program powinien pobierać rok tak długo, aż użytkownik poda prawidłowy). W klasie powinna znajdować się także stała przechowująca informację o procencie premii (10%). Utwórz konstruktor klasy, który pobierze wartości pól od użytkownika. Przeciąż go tak, by wartości pól stanowiły listę parametrów. Utwórz metodę, która obliczy i zwróci płacę brutto (z uwzględnieniem premii). W funkcji Main utwórz dwa obiekty obiekt klasy Pracownicy – obiektu utwórz za pomocą różnych konstruktorów. Wyświetl informacje o obydwóch pracownikach. Zadanie 3 W programie utwórz klasę Samochody. Klasa posiada pola przechowujące informacje o: marka, model, pojemność silnika, rok produkcji i cenie (cena powinna być większa od zera, program powinien pobierać cenę tak długo, aż użytkownik poda prawidłową). W klasie powinna znajdować się także stała przechowująca informację o rabacie standardowym (8%). Utwórz konstruktor klasy, który pobierze wartości pól od użytkownika. Utwórz metodę, która obliczy i zwróci cenę samochodu po rabacie. Przeciąż ją – w liście parametrów uwzględnij rabat podany przez użytkownika. W funkcji Main utwórz obiekt klasy Samochody oraz zmienną, która będzie przechowywać rabat podany przez użytkownika. Pobierz rabat od użytkownika. Wyświetl informacje o samochodzie: marka, model, pojemność silnika, rok produkcji, cena, cena po rabacie standardowym oraz cena po rabacie podanym przez użytkownika. Zadanie 4 W programie utwórz klasę Czasopisma. Klasa posiada pola przechowujące informacje o: tytule, wydawcy, numerze, nakładzie, cenie (rok powinna być większa od 0, program powinien pobierać cenę tak długo, aż użytkownik poda prawidłowy). W klasie powinna znajdować się także stała przechowująca informację o rabacie standardowym (3%). Utwórz konstruktor klasy, który pobierze wartości pól od użytkownika. Przeciąż go tak, by wartości pól stanowiły listę parametrów. Utwórz metodę, która obliczy i zwróci cenę po rabacie (z uwzględnieniem premii). W funkcji Main utwórz dwa obiekty obiekt klasy Czasopisma – obiektu utwórz za pomocą różnych konstruktorów. Wyświetl informacje o obydwóch czasopismach. Zadanie 5 Przygotuj klasę Punkt3D pozwalającą na reprezentację punktów w przestrzeni 3D. Przyjmij, że współrzędne punktu są wartościami typu rzeczywistego. W klasie zaimplementuj: przeciążony konstruktor – jeden konstruktor bezargumentowy inicjujący współrzędne wartością 0, oraz drugi konstruktor inicjujący współrzędne wartościami przekazanych argumentów, właściwości pozwalające na odczytanie i zmianę wartości współrzędnych, metodę pozwalającą na wyznaczenie odległości między punktami: √ ( x −x ) +( y − y ) +( z −z ) d ( A , B )= 2 B A 2 B A 2 B A Zadanie 6 Napisz klasę Czas, która będzie służyła do reprezentowania czasu przy pomocy godzin i minut. Klasa ma zawierać: jedno pole prywatne do przechowywania minut, przeciążony konstruktor, który przyjmuje w jednej wersji jeden argument reprezentujący minuty, zaś w drugiej wersji dwa argumenty reprezentujące godziny oraz minuty, przeciążoną metodę ToString(), która zwraca ciąg znaków w formacie „HH:mm”, reprezentujący liczbę godzin i minut, przeciążony operator +, dodający do siebie dwie wartości czasu, przeciążony operator -, odejmujący od siebie dwie wartości czasu. W metodzie Main() stwórz przykład wykorzystania klasy Czas. Zadanie 7 Przygotuj klasę Kolo pozwalającą na reprezentowanie kół o podanym promieniu. Przyjmij, że promień jest wartością typu rzeczywistego większą od 0. W klasie zaimplementuj: przeciążony konstruktor – jeden konstruktor bezargumentowy inicjujący promień wartością 1, oraz drugi konstruktor inicjalizujący promień wartością przekazanego argumentu, która musi być większa od 0, właściwość – pozwalającą na odczytanie i zmianę wartości promienia, właściwość – pozwalającą na odczytanie i zmianę wartości średnicy, właściwość – pozwalającą na uzyskanie pola powierzchni koła, właściwość – pozwalającą na uzyskanie obwodu koła. Klasa powinna zgłaszać wyjątki w sytuacji, gdy promień przyjmuje wartość równą lub mniejszą od 0. Przygotuj przykład użycia zaimplementowanej klasy. Zadanie 8 Napisz klasę Macierz, która będzie zawierała: Pola: o Wiersze, Kolumny – typu całkowitego, o tabMacierz – dwuwymiarowa tablica liczb całkowitych, Konstruktory z mechanizmem składania konstruktorów: o Pierwszy jako argumenty przyjmuje liczbę wierszy i kolumn, o Drugi jako argumenty przyjmuje liczbę wierszy, kolumn oraz tablicę dwuwymiarową, Metody: o Equals() – sprawdzająca, czy dwie macierze mają takie same wartości, o ToString() – zwracająca zmienną typu string z elementami macierzy, (każdy wiersz w osobnej linii) Właściwości. Utwórz w metodzie Main() programu dwie macierze wykorzystując do tego dwa różne konstruktory, oraz sprawdź działanie metod Equals() i ToString() – (następnie wykorzystaj override). Do klasy Macierz dodaj następnie metodę, która pozwoli na dodawanie do siebie dwóch macierzy. Uzupełnij klasę o operator +, który będzie służył do dodawania dwóch macierzy. W wyniku działania tego operatora powinna być zwracana macierz wynikowa. Dodawane macierze muszą mieć ten sam rozmiar. (przeciążanie operatorów) Uzupełnij klasę o operator *, który będzie służył do mnożenia dwóch macierzy. W wyniku działania tego operatora powinna być zwracana macierz wynikowa. Liczba kolumn pierwszej macierzy musi być równa liczbie wierszy drugiej macierzy. (przeciążanie operatorów) Zadanie 9 Napisz klasę Osoba, która będzie służyła do reprezentowania osób, które opisane są przez imię, nazwisko i datę urodzenia. Utwórz konstruktory, które będą wykorzystywały mechanizm składania konstruktorów do zainicjowania pól opisujących osobę, oraz właściwości pozwalające na odczytanie oraz zmodyfikowanie poszczególnych pól. Następnie uzupełnij klasę Osoba o mechanizm, który pozwoli na wyświetlenie liczby osób. Po wyświetleniu listy osób, program powinien wypisać liczbę osób z użyciem publicznego pola statycznego zawierającego odpowiednią wartość. Zadanie 10 Napisz program, w którym zdefiniuj klasę Samochod. Klasa ta powinna mieć prywatne pola: marka, model. IloscDrzwi, pojemnoscSilnika, srednieSpalanie. Klasa ta ma posiadać właściwości dostępowe do wszystkich pól, które nie są statyczne oraz ma umożliwiać przechowywanie informacji na temat liczby utworzonych obiektów tej klasy (poprzez pole statyczne typu int o nazwie „iloscSamochodow” i przypisanie mu wartości 0). W klasie Samochod powinien być utworzony konstruktor domyślny, który wszystkim polom przyporządkowuje wartości: „nieznana” lub „nieznany” dla pól typu string, „0” dla pól typu int , „0.0” dla pól typu double. Wywołanie konstruktora powinno zwiększać o 1 wartość pola statycznego iloscSamochodow. Powinien być także konstruktor przyjmujący następujące parametry: marka_, model_, iloscDrzwi_, pojemnoscSilnika_, srednieSpalanie_. TyKonstruktor ma przekazywać wartości parametrów polom. Wywołanie konstruktora powinno zwiększać o 1 wartość pola statycznego iloscSamochodow. W klasie powinna znaleźć się prywatna metoda ObliczSpalanie zwracającej wartość typu double i przyjmującej parametr dlugoscTrasy typu double. Metoda ta ma obliczać spalanie samochodu na podstawie podanej wartości długości trasy i wartości pola srednieSpalanie. Spalanie obliczamy według wzoru: spalanie = (srednieSpalanie * dlugoscTrasy) / 100.0 W klasie powinna także znaleźć się publiczna metoda ObliczKosztPrzejazdu zwracającej wartość typu double i przyjmującej parametry dlugoscTrasy typu double i cenaPaliwa typu double. Metoda ta ma obliczać koszt przejazdu na trasie o podanej długości, zakładając podaną cenę paliwa za litr. Metoda ta ma wykorzystywać prywatną metodę ObliczSpalanie. Koszt przejazdu obliczamy według wzoru: kosztPrzejazdu = spalanie * cenaPaliwa Utwórz publiczną metodę WypiszInfo zwracającą wartość typu void i nie przyjmującej żadnych parametrów. Metoda ta ma wypisywać na ekranie konsoli wartości wszystkich pól klasy Samochod. Klasa Samochod ma umożliwiać obliczanie ceny paliwa potrzebnego do przejechania danej trasy na podstawie podanej długości trasy i ceny paliwa za litr Klasa Samochod ma umożliwiać wypisanie na ekran konsoli wszystkich informacji o danym samochodzie (wartości pól, które nie są statyczne). Klasa Samochod ma umożliwiać wypisanie na ekran konsoli informacji o liczbie utworzonych obiektów (poprzez metodę statyczną) Zadanie 11 1. Napisz program do obsługi zamówień. Program powinien składać się z dwóch klas: Zamowienie oraz Pozycja, przy czym każde zamówienie zawierać może jedną lub więcej pozycji. Klasa Pozycja powinna zawierać następujące pola: • nazwaTowaru (String) • ileSztuk (int) – liczba zamówionych sztuk • cena (double) – cena pojedynczej sztuki oraz metody: • konstruktor z parametrami umożliwiającymi ustalenie wartości pól klasy, • metodę double obliczWartosc() zwracającą wartość pozycji zamówienia, • metodę String toString() zwracającą łańcuch w formacie: nazwa towaru (20 znaków), cena (10 znaków), liczba sztuk (4 znaki), wartość zamówienia (10 znaków), przykład: Cukier 4,00 zł 3 szt. 12,00 zł Klasa Zamowienie powinna zawierać następujące pola: • pozycje (tablica obiektów kl. Pozycja) – pozycje składowe zamówienia, • ileDodanych (int) – liczba pozycji w zamówieniu, • maksRozmiar (int) – maksymalna liczba pozycji w zamówieniu oraz metody: • konstruktor bezparametrowy – maksRozmiar ustalany na wartość 10, • konstruktor z parametrem określającym maksymalną liczbę pozycji w zamówieniu, • metodę void dodajPozycje(Pozycja p) , która dodaje podaną pozycję do zamówienia, • metodę double obliczWartosc() zwracającą wartość zamówienia, • metodę String toString() , która zwraca łańcuch zawierający spis pozycji zamówienia oraz łączną wartość zamówienia. Przykładowa metoda korzystająca z wspomnianych klas: public static void main(String [] args) throws IOException { Pozycja p1 = new Pozycja("Chleb", 1, 3.5); Console.WriteLine(p1); Pozycja p2 = new Pozycja("Cukier", 3, 4); Console.WriteLine(p2); Zamowienie z = new Zamowienie(20); z.dodajPozycje(p1); z.dodajPozycje(p2); Console.WriteLine(z); } Przykładowy wynik: Chleb 3,50 zł 1 szt. 3,50 zł Cukier 4,00 zł 3 szt. 12,00 zł Zamówienie: Chleb 3,50 zł 1 szt. 3,50 zł Cukier 4,00 zł 3 szt. 12,00 zł Razem: 15,50 zł 2. W klasie Zamowienie : • zaimplementować metodę void usunPozycje(int indeks) , która usuwa z zamówienia pozycję o podanym indeksie • zaimplementować metodę void edytujPozycje(int indeks) , która umożliwi edycję wybranej pozycji zamówienia, tj. nazwy towaru, ceny oraz liczby sztuk • zmodyfikować metodę void dodajPozycje(Pozycja p) , tak by w stytuacji, gdy dodawany jest ten sam towar nie dodawała kolejnej pozycji, lecz zwiększała liczbę sztuk w już istniejącej 3. W klasie Pozycja : • zaimplementować metodę double obliczWartoscZRabatem , która oblicza wartość pozycji zamówienia po uwzględnieniu rabatu zależnego od liczby sztuk: – 5–10 szt. rabat 5%, – 10–20 szt. rabat 10 – powyżej 20 szt. rabat 15%. 4. Zmodyfikować metodę obliczWartosc w klasie Zamowienie, tak by również wyświetlała informacje o rabacie i łączny koszt zamówienia po jego uwzględnieniu. 5. Zmodyfikować metodę toString , by wyświetlała również naliczony rabat i wartość z rabatem. 6. W obu klasach zaimplementować interfejs Serializable umożliwiający zapis i odczyt danych z pliku realizowany przez metody: • metodę public static void zapiszZamowienie(Zamowienie z, String nazwaPliku) , która zapisze podane w parametrze zamówienie do pliku o nazwie podanej drugim parametrem. • metodę public static Zamowienie wczytajZamowienie(String nazwaPliku) , która wczyta z pliku o podanej nazwie zamówienie i zwróci je jako wynik.