Programowanie Obiektowew języku C++ Zadania L4 Mirosław Głowacki 1,2 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej Katedra Informatyki Stosowanej i Modelowania 2 Uniwersytet im. Jana Kochanowskiego w Kielcach Wydział Matematyczno-Przyrodnmiczy Instytut Fizyki Zakład Informatyki Listopad 2016 Mirosław Głowacki (AGH, UJK) Programowanie Obiektowe 2016 1 / 10
Spis treści 1 Zadanie L4-1 2 Zadanie L4-2 3 Podpowiedzi do zadań L4 Mirosław Głowacki (AGH, UJK) Programowanie Obiektowe 2016 2 / 10
Zadanie L4-1 Zdefiniować klasę complex tak, aby program Code wygenerował strumień wyjściowy Output przedstawiony na następnym przeźroczu. Code complex sumcmplint(complex c, int i){ return complex(c.re() + static_cast<double>(i),c.im()); int main(){ complex c(-3., -2.), *pc = &c, cmpl = c; cout << c.modul() << endl; int i = 7; double d = 3.72; cout << sumcmplint(c, i) << endl; cout << sumcmplint(*pc, d) << endl; cout << sumcmplint(cmpl, c) << endl; } Mirosław Głowacki (AGH, UJK) Programowanie Obiektowe 2016 3 / 10
Zadanie L4-1 Klasa liczb zespolonych complex powinna zawierać następujące pola prywatne: Pola klasy class complex{ static int lp; const int nrcmpl; double re, im; double *modul; }; Output 5 (4, -2) (0, -2) (-6, -2) Wskaźnik modul powinien pokazywać na obszar pamięci, gdzie zapiany jest moduł liczby, który powinien być zwracany przez funkcję Modul() o dostępie publicznym Pole lp jest licznikiem powstających liczb zespolonych. Pole nrcmpl jest numerem liczby. Mirosław Głowacki (AGH, UJK) Programowanie Obiektowe 2016 4 / 10
Spis treści 1 Zadanie L4-1 2 Zadanie L4-2 3 Podpowiedzi do zadań L4 Mirosław Głowacki (AGH, UJK) Programowanie Obiektowe 2016 5 / 10
Zadanie L4-2 Rozszerzyć definicję klasy complex tak, aby pole nrcmpl, które jest zwracane przez funkcję NrCmpl() było typu const, a program i strumień były następujące: int main(){ complex c(-3., -2.), *pc = &c, cmpl = c; cout << "Nr obiektu cmpl: " << cmpl.nrcmpl() << endl; char chr = 'D'; bool b = true; cout << sumcmplint(chr, chr) << endl; cout << sumcmplint(b, b) << endl; cout << "Liczba utworzonych obiektow complex: " << complex::lp() << endl; return 0; } Nr obiektu cmpl: 2 (136, 0) (2, 0) Liczba utworzonych obiektow complex: 6 Mirosław Głowacki (AGH, UJK) Programowanie Obiektowe 2016 6 / 10
Spis treści 1 Zadanie L4-1 2 Zadanie L4-2 3 Podpowiedzi do zadań L4 Mirosław Głowacki (AGH, UJK) Programowanie Obiektowe 2016 7 / 10
Podpowiedzi do zadań L4 Instrukcja: complex c(-3., -2.), *pc = &c, cmpl = c; wymaga zdefiniowania konstruktora kopiującego do utworzenia obiektu cmpl, wskaźnik pc pobiera adres c bez udziału żadnego z konstruktorów. Instrukcja: cout << sumcmplint(c, i) << endl; nie wymaga żadnych konwersji - parametry aktualne c i i dokładnie pasują do formalnych. Mirosław Głowacki (AGH, UJK) Programowanie Obiektowe 2016 8 / 10
Podpowiedzi do zadań L4 Instrukcja: cout << sumcmplint(*pc, d) << endl; pierwszy z parametów *pc dokładnie pasuje do formalnego. drugi z parametrów wymaga konwersji z typu double na typ int - konwersje dla typów wbudowanych są jednak predefiniowane. Instrukcja: cout << sumcmplint(cmpl, c) << endl; wymaga konwersji drugiego z parametrów z typu complex na typ int - potrzebny jest operator konwersji w klasie complex pierwszy parametr jest zgodny z formalnym. Mirosław Głowacki (AGH, UJK) Programowanie Obiektowe 2016 9 / 10
Podpowiedzi do zadań L4 Instrukcje: cout << sumcmplint(chr, chr) << endl; cout << sumcmplint(b, b) << endl; wymagają utworzenia konstruktorów konwertujących: char complex oraz bool complex konwersje: char int oraz bool int są predefiniowane. Mirosław Głowacki (AGH, UJK) Programowanie Obiektowe 2016 10 / 10