Program przedmiotu Programowanie Obiektowe (język C++) Wykład 1. Definiowanie prostych klas. Przykłady. Przypomnienie: typy referencyjne, domyślne wartości argumentów, przeciąŝanie funkcji. Konstruktory, destruktory. Definiowanie operatorów. Strumieniowe operacje we/wy. Wskaźnik this. Operatory new, delete. Funkcje zaprzyjaźnione. Klasa z dynamicznie alokowaną tablicą składowych. Pola i metody statyczne. Dostępność składowych klasy. Klasa z polem obiektowym. Program przedmiotu c.d.: Dziedziczenie, polimorfizm i metody wirtualne. Jak realizowany jest mechanizm wirtualności? Metody czysto wirtualne i ATD. Obsługa błędów. Obsługa wyjątków. Wyjątki jako mechanizm sterujący. Konwersje, operatory konwersji i konwertery. Definiowanie i wykorzystanie szablonów funkcji. Definiowanie i wykorzystanie szablonów klas. Elementy biblioteki STL. Literatura B. Stroustrup Język C++ (The C++ Programming Language), WNT 2002 S.B. Lippman Podstawy języka C++ (C++ Primer), WNT 1997 J. Grębosz Symfonia C++ standard, Edition 2005 J. Liberty Poznaj C++ w 10 minut, Intersoftland 1999 Nicolai M. Josuttis - C++ Biblioteka standardowa. Podręcznik programisty, Helion 2003-1- -2- -3- -4-
Zadanie na początek Chcemy napisać program, który umoŝliwi wykonywanie prostych obliczeń na liczbach zespolonych. ; void Read ( CMPLX& a ) cin >> a.re; cin >> a.im; Przykład #1 Zadanie zrealizujemy najpierw wykorzystując środki języka C++ znane nam juŝ z wykładu AiPP. Następnie zobaczymy, jak moŝe to wyglądać w języku C++ z wykorzystaniem pojęcia klasy. double Abs ( CMPLX a ) return sqrt ( a.re * a.re + a.im * a.im ); CMPLX Add ( CMPLX a, CMPLX b ) int main ( ) CMPLX x,y,z; double result; Read ( x ); Read ( y ); result = Abs ( z ); cout << "Result = << result; ; void Read ( CMPLX& a ) cin >> a.re; cin >> a.im; CMPLX Add ( CMPLX a, CMPLX b ) double Abs ( CMPLX a ) return sqrt ( a.re * a.re + a.im * a.im ); int main ( ) double result; Read ( x ); Read ( y ); result = Abs ( z ); cout << Result = << result; -5- -6- -7- -8-
Struktura programu Przykład #1 Przykład #2 double Abs ( ) return sqrt ( Re * Re + Im * Im ); void Read ( ) cin >> Re; cin >> Im; ; CMPLX Add ( CMPLX a, CMPLX b ) int main ( ) cout << \nresult = << z.abs ( ) << endl; #include < iostream > #include < cmath > ; double Abs ( ) return sqrt ( Re * Re + Im * Im ); void Read ( ) cin >> Re; cin >> Im; CMPLX Add ( CMPLX a, CMPLX b ) int main ( ) cout << \nresult = << z.abs ( ) << endl; -9- -10- -11- -12-
Przykład #2 Przykład #2. double Abs ( ) return sqrt ( Re * Re + Im * Im ); void Read ( ) cin >> Re; cin >> Im; ; CMPLX Add ( CMPLX a, CMPLX b ) int main ( ) double Abs ( ) const return sqrt ( Re * Re + Im * Im ); void Read ( ) cin >> Re >> Im; ; CMPLX Add ( CMPLX a, CMPLX b ) int main ( ) cout << \nresult= << z.abs ( ) << endl; cout << \nresult= << z.abs ( ) << endl; Przykład #2.. Struktura programu Przykład #2 double Abs ( ) const return sqrt ( Re * Re + Im * Im ); void Read ( ) cin >> Re >> Im; ; CMPLX operator+ ( CMPLX a, CMPLX b ) int main ( ) z = x + y; // równowaŝne: z = operator+ ( x, y ); cout << \nresult= << z.abs ( ) << endl; -13- -14- -15- -16-
Nasz program przykładowy moŝemy zapisać w trzech plikach: Struktura programu Przykład #3 cmplx.h plik nagłówkowy klasy (definicja klasy CMPLX i deklaracje funkcji wspomagających), cmplx.cpp plik implementacyjny klasy (definicje metod klasy CMPLX i definicje funkcji wspomagających), progmain.cpp główny plik aplikacji (definicja funkcji main i ewentualnie definicje innych funkcji programu). Plik nagłówkowy (definicja klasy CMPLX) // cmplx.h // cmplx.cpp Plik implementacyjny klasy CMPLX #include < iostream > #include < cmath > #include cmplx.h ; double Abs ( ) const; void Read ( ); double CMPLX :: Abs ( ) const return sqrt ( Re * Re + Im * Im ); CMPLX operator+ ( CMPLX, CMPLX ); void CMPLX :: Read ( ) cin >> Re >> Im; CMPLX operator+ ( CMPLX a, CMPLX b ) -17- -18- -19- -20-
// myprog.cpp Główny plik aplikacji Struktura programu Przykład #3 #include < iostream > #include cmplx.h int main ( ) z = x + y; cout << \nresult = << z.abs ( ) << endl; Koniec wykładu 1. -21- -22- -23-