Języki i Paradygmaty Programowania Laboratorium 1 Obiekty i klasy C++ Wstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać) UWAGA! Umiejętność tworzenia przejrzystego i czytelnego kodu, jest podstawą w tworzeniu większych projektów. Jedyna, dopuszczalna forma chaosu, to niemiecki chaos (patrz rys.1). Rys. 1 Nawet przy najmniejszych zadaniach laboratoryjnych, proszę zachować logikę w nazewnictwie zmiennych i klas. Proszę pamiętać o tworzeniu osobnych plików dla: metod, klas oraz wreszcie użycia klasy (main). Przy wystąpieniu błędu
Proszę: a) Zastosować się do porady VS i samemu sprawdzić w pomocy online, co zrobić lub b) Proszę kolejno przejść: Project -> Properties -> C/C++ -> Preprocessor -> Preprocessor Definitions" dopisać _CRT_SECURE_NO_WARNINGS Nasze programy (właściwie, Państwa programy), będą miały zwyczaj szybkiego zamykania konsoli, zanim zdążycie przeczytać, co na niej się pojawiło. Dla tych, którzy zapomnieli z poprzedniego semestru, polecam: Na koniec kilka przydatnych #include #include <iostream> #include <stdio.h> #include <tchar.h> #include <string>
1. Wiadomości teoretyczne: Tworzenie klas: class NazwaKlasy ; // ciało klasy Metody: void NazwaKlasy::metody(int a) //ciało metody. UWAGA! Metoda ma być zdefiniowana poza klasą, czyli poza nawiasami klamrowymi klasy! Przykład deklaracji trzech różnych typów konstruktora + destruktor: class NazwaKlasy public: NazwaKlasy(); NazwaKlasy(char[], int, bool); NazwaKlasy(int, int); ~NazwaKlasy; //destruktor ; Konstruktory: NawaKlasy:NazwaKlasy() //ciało konstruktora. NawaKlasy:NazwaKlasy(int a, int b) //ciało konstruktora wywoływanego z dwoma parametrami. Operacje na obiektach: NazwaKlasy obiekt_x; //tworzenie obiektu o nazwie obiekt_x należącego do klasy NazwaKlasy
NazwaKlasy obiekt_x (1,2) // tworzenie obiektu o nazwie obiekt_x wyposażonego w konstruktor umożliwiający wpisanie dwóch danych int obiekt_x.a //odwołanie się do publicznej danej skladowej a obiektu obiekt_x obiekt_x.oblicz ( nazwa, a, b) //odwolanie do publicznej metoda obietu obiekt_x. Agr metoda (char, int, int) 2. Zadania 2.1 Zdefiniuj klasę reprezentującą konto rabatowe payback. Składowe powinny opisywać nazwisko posiadacza konta, numer karty rabatowej i ilość zdobytych punktów rabatowych. Napisz krótki program obsługujący klasę. Metody powinny: Tworzyć obiekt i go inicjalizować, Wyświetlać nazwisko klienta, numer karty i ilość zdobytych punktów Zamieniać wpłacone pieniądze na dodatkowe punkty rabatowe ( 1zł = 10pkt). Kwota jest określana argumentem wywołania Wydawać punkty rabatowe z konta w ilości określonej argumentem wywołania 2.2 Mamy dany kod programu: class Person private: string surname; string firstname; public: Person() this->surname = ""; this->firstname = ""; // #1 Person (string & fname, string & sname ) this->surname = sname; this->firstname = fname; // #2 //Metody wyswietlajace imie i nazwisko: void Show(); void FormalShow(); // imię nazwisko // nazwisko imię ;
Napisz program, który uzupełni implementację klasy o kod niezdefiniowanych metod. Program, ma dodatkowo przetestować trzy możliwe wywołania konstruktora (bez argumentów, z jednym argumentem, z dwoma argumentami) oraz metody wyświetlające dane obiektu. Zadanie 2.3 Mamy strukturę struct employee char fullname[35]; double payment; ; Napisz program, który będzie dodawał struktury pracownika na stos i je usuwał. Za każdym razem gdy usuwamy strukturę ze stosu należy dodać wartość wynagrodzenia do ogólnej wartości płacy i ją wyświetlić. Jedyne co można zmienić w klasie stack, to typ zmiennej Item, tak by był to typ employee. #include "stack.h" // stack.cpp -- metody klasy stosu Stack::Stack() top = 0; // tworzy pusty stos bool Stack::isempty() const return top == 0; bool Stack::isfull() const return top == MAX; bool Stack::push(const Item & item) if (top < MAX) items[top++] = item; return true; else return false; bool Stack::pop(Item & item) if (top > 0) item = items[--top]; return true; else return false;
Stack h: // stack.h -- definicja klasy stosu (wg ADT) #ifndef STACK_H_ #define STACK_H_ typedef unsigned long Item; class Stack private: enum MAX = 10; // stała zasięgu klasy Item items[max]; // przechowuje elementy stosu int top; // indeks szczytowego elementu stosu public: Stack(); bool isempty() const; bool isfull() const; // push() zwraca false, jeśli stos jest już pełen (true w pozostałych przypadkach) bool push(const Item & item); // odkłada element na stos // pop() zwraca false, jeśli stos jest już pusty (true w pozostałych przypadkach) ; #endif bool pop(item & item); // zdejmuje element ze stosu