Program przedmiotu Programowanie (język C++) Wykład 1. Język C a C++. Definiowanie prostych klas. 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 Vector z dynamicznie alokowaną tablicą składowych. Pola i metody statyczne. Dostępność składowych klasy. Klasa z polem obiektowym typu Vector. Tomasz Marks - Wydział MiNI PW -1- Tomasz Marks - Wydział MiNI PW -2- 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. C++ a inne języki programowania obiektowego. Literatura B. Stroustrup Język C++ (The C++ Programming Language), WNT 2002 S.B. Lippman Podstawy języka C++ (C++ Primer), WNT 1997 B. Eckel Thinking in C++. Edycja polska, Helion 2002 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 Tomasz Marks - Wydział MiNI PW -3- Tomasz Marks - Wydział MiNI PW -4-
Zadanie na początek Chcemy napisać program, który umoŝliwi wykonywanie prostych obliczeń na liczbach zespolonych. Zadanie zrealizujemy najpierw w języku C. Następnie zobaczymy, jak moŝe to wyglądać w języku C++. #include <stdio.h> #include <math.h> typedef struct _CMPLX CMPLX; void ReadZ ( CMPLX *a ) scanf ( %lf, &a->re ); scanf ( %lf,&a->im ); Przykład #1 ( C ) double AbsZ ( CMPLX a ) return sqrt ( a.re * a.re + a.im * a.im ); CMPLX AddZ ( CMPLX a, CMPLX b ) void main ( void ) CMPLX x,y,z; double result; ReadZ ( &x ); ReadZ ( &y ); z = AddZ ( x, y ); result = AbsZ ( z ); printf( \nresult=%f\n, result ); Tomasz Marks - Wydział MiNI PW -5- Tomasz Marks - Wydział MiNI PW -6- #include <stdio.h> #include <math.h> typedef struct _CMPLX CMPLX; void ReadZ ( CMPLX *a ) scanf ( %lf, &a->re ); scanf ( %lf, &a->im ); CMPLX AddZ ( CMPLX a, CMPLX b ) double AbsZ ( CMPLX a ) return sqrt ( a.re * a.re + a.im * a.im ); void main ( void ) double result; ReadZ ( &x ); ReadZ ( &y ); z = AddZ ( x, y ); result = AbsZ ( z ); printf ( \nresult=%f\n, result ); Tomasz Marks - Wydział MiNI PW -7- Tomasz Marks - Wydział MiNI PW -8-
#include <iostream> #include <cmath> Przykład #2 ( C++ ) struct CMPLX double Abs ( ) return sqrt ( Re * Re + Im * Im ); void Read ( ) cin >> Re; cin >> Im; ; CMPLX Add ( CMPLX a, CMPLX b ) #include < iostream > #include < cmath > struct CMPLX double Abs ( ) return sqrt ( Re * Re + Im * Im ); int main ( ) z = Add ( x, y ); ; void Read ( ) cin >> Re; cin >> Im; Tomasz Marks - Wydział MiNI PW -9- Tomasz Marks - Wydział MiNI PW -10- CMPLX Add ( CMPLX a, CMPLX b ) int main ( ) z = Add ( x, y ); #include <iostream> #include <cmath> Przykład #2.. ( C++ ) struct CMPLX double Abs ( ) const return sqrt ( Re * Re + Im * Im ); void Read ( ) cin >> Re >> Im; ; CMPLX Add ( CMPLX a, CMPLX b ) int main ( ) z = Add ( x, y ); Tomasz Marks - Wydział MiNI PW -11- Tomasz Marks - Wydział MiNI PW -12-
#include <iostream> #include <cmath> Przykład #2b ( C++ ) Struktura programu Przykład #2 (C++) struct CMPLX 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 ); Tomasz Marks - Wydział MiNI PW -13- Tomasz Marks - Wydział MiNI PW -14- Nasz program przykładowy moŝemy zapisać w trzech plikach: Struktura programu Przykład #3 (C++) 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). Tomasz Marks - Wydział MiNI PW -15- Tomasz Marks - Wydział MiNI PW -16-
Plik nagłówkowy (definicja klasy CMPLX) // cmplx.h struct CMPLX // 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 ) Tomasz Marks - Wydział MiNI PW -17- Tomasz Marks - Wydział MiNI PW -18- // progmain.cpp Główny plik aplikacji Struktura programu Przykład #3 (C++) #include < iostream > #include cmplx.h int main ( ) z = x + y; Tomasz Marks - Wydział MiNI PW -19- Tomasz Marks - Wydział MiNI PW -20-
Koniec wykładu 1. Tomasz Marks - Wydział MiNI PW -21-