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.

Podobne dokumenty