Programowanie Sobera Jolanta 16.09.2006 Strona 1 z 26
1 Wprowadzenie do programowania 4 2 Pierwsza aplikacja 5 3 Typy danych 6 4 Operatory 9 Strona 2 z 26 5 Instrukcje sterujące 12 6 Podprogramy 15 7 Tablice 18 8 Wskaźniki 19 9 Podstawy programowania obiektowego 21
Strona 3 z 26 Literatura [1] Jerzy Grębosz, Symfonia C++, Oficyna Kallimach, Kraków, 1999, [2] Anna Struzińska - Walczak, Krzysztof Walczak, Nauka programowania dla początkujących C++, Wydawnictwo W & W, Warszawa, 1999, [3] Bjarne Stroustrup, Język C++, WNT, Warszawa, 1997, [4] Davis Chapman, Visual C++ dla każdego, Helion, Gliwice, 1999.
Strona 4 z 26 1. Wprowadzenie do programowania Programowanie komputerów polega na zapisaniu listy poleceń do wykonania przez komputer w pewnym umownym języku. Etapy procesy rozwiązywania problemów przy pomocy komputera: sformułowanie problemu, analiza problemu i wyznaczenie algorytmu, który go rozwiązuje zakodowanie algorytmu (napisanie programu) uruchomienie i testowanie programu
Strona 5 z 26 2. Pierwsza aplikacja Program w językach C, C++, składa się z funkcji, które pozwalają zapisywać wyróżnione części algorytmu w postaci odrębnych fragmentów programu. Funkcja main() Operacje we/wy nie są elementami języka. Podprogramy odpowiedzialne za ich realizację umieszczone są w bibliotece o nazwie iostream (input output stream). Dyrektywa preprocesora #include Kompilator - linker - preprocesor Język wolnego formatu
Strona 6 z 26 3. Typy danych Każda nazwa zanim zostanie użyta musi zostać zadeklarowana. Deklaracje określają, że dany obiekt jest pewnego typu (np. int a; oznacza że zmienna a jest typu całkowitego). 1. Typy reprezentujące liczby całkowite char -128-127 unsigned char 0-255 short -32.767-32.767 unsigned short 0-65.535 int -2147483648-2147483647 unsigned int 0-4297967295
Strona 7 z 26 2. Typy reprezentujące liczby zmiennoprzecinkowe - umożliwiają pracę na liczbach rzeczywistych z różną dokładnością float 1.1 10 38 3.4 10 38-6 cyfr znaczących double 2.2 10 308 1.79 10 308-15 cyfr znaczących long double 3.3 10 4932 1.1 10 4932-18 cyfr znaczących. L = mantysa 10 cecha 3. Typ pusty (void) - jest używany jako typ wartości zwracanej przez funkcje, które nie zwracają wartości oraz dla zaznaczenia, że funkcja jest bezparametrowa. 4. Typ wyliczeniowy enum nazwa typu {lista wyliczeniowa} ;
5. Czas życia zmiennej (zmienne lokalne i globalne) Strona 8 z 26
Strona 9 z 26 4. Operatory 1. Operator przypisania = a = 1 2. Operatory arytmetyczne + dodawanie - odejmowanie * mnożenie / dzielenie 3. Operator % - modulo - reszta z dzielenia np. 10%3 = 1. 4. Operatory jednoargumentowe - + i zmiana wartości wyrażenia na przeciwną 5. Operatory inkrementacji i dekrementacji Forma przedrostkowa a = + + i b = i
Forma przyrostkowa a = i + + 6. Operatory logiczne b = i Strona 10 z 26 Operatory relacyjne < -mniejszy niż <= - mniejszy lub równy > - większy niż >= - większy lub równy == - równy! = - różny Operator negacji! Jednoargumentowy operator negacji (wykrzyknik). Operatory sumy logicznej ( ) i iloczynu logicznego (&&)
Wieloznakowe operatory przypisania a+=b a=a+b a-=b a=a-b a*=b a=a*b a/=b a=a/b a%=b a=a%b Strona 11 z 26
5. Instrukcje sterujące 1. Prawda fałsz. 2. Instrukcja warunkowa if if (wyrażenie) instrukcja1; if (wyrażenie) instrukcja1; else instrukcja2; Strona 12 z 26 if (wyrażenie) instrukcja1; else if (wyrażenie) instrukcja2; else instrukcja3;
3. Instrukcja while. while (wyrażenie) instrukcja; while (wyrażenie) { instrukcje } 4. Pętla do... while... do { instrukcje } while (wyrażenie); Strona 13 z 26 5. Pętla for for (wyrażenie1; wyrażenie2; wyrażenie3) instrukcja; for (wyrażenie1; wyrażenie2; wyrażenie3) {instrukcje;}
Strona 14 z 26 6. Instrukcja switch switch (wyrażenie) {case wartość1 : instrukcja1; \\ break; case wartość2 : instrukcja2; \\break; case wartość3 : instrukcja3; \\break; default : instrucja4; \\break; } 7. Instrukcja break 8. Instrukcja continue
6. Podprogramy Podprogram - wyodrębniona część programu realizująca pewne zadania (np. obliczanie pola figury). Funkcja - podprogram, który jako rezultat zwraca wartość. typ wartości zwracanej nazwa funkcji (lista argumentów) Strona 15 z 26 Deklaracja a definicja funkcji Przesyłanie argumentów do funkcji. Przesyłanie argumentów przez wartość - tworzona jest kopia argumentu przesłanego do funkcji, jakiekolwiek zmiany tego argumentu nie są widoczne po opuszczeniu funkcji. Przesyłanie argumentów przez referencję (przezwisko) - pozwala na modyfikowanie tego argumentu, gdyż do funkcji trafia adres argumentu.
Argumenty domniemane - argumenty którym nadaje się wartość w momencie deklaracji funkcji (w definicji już się tego nie powtarza). Argumenty domniemane znajdują się zawsze na końcu listy. Przykład. Strona 16 z 26 int fk (int x,float m,int a=4,float y=6.55,int k=10); wywołania fk(2,3.14); fk(2,3.14,7); fk(2,3.14,7,0.3); fk(2,3.14,7,,5); - błąd fk(2,3.14,7,0.3,5);
Przeciążanie nazw funkcji - polega na nadawaniu tych samych nazw funkcjom realizującym analogiczne operacje, ale różniących się typem lub liczbą parametrów. Strona 17 z 26
Strona 18 z 26 7. Tablice Tablica jest to struktura danych zawierająca elementy tego samego typu. typ elementów nazwa tablicy [rozmiar]; Numeracja elementów tablicy zaczyna sie od zera. int tab[4]={5,7}; for(int i=0;i<4;i++) cout<<tab[i]<<endl; Nazwa tablicy jest adresem jej zerowego elementu.
Strona 19 z 26 8. Wskaźniki W języku C++ można używać zmiennych wskaźnikowych, których wartością są wskaźniki zawierające adresy obiektów w pamięci. int * w; // definicja zmiennej wskaźnikowej // pokazywać na obiekty typu int int k=7; //definicja zmiennej w=&k; cout<<k<<*w; cout<<&k<<w; mogącej
Strona 20 z 26 Zastosowanie wskaźników wobec tablic Rezerwacja obszarów pamięci Operator new przydziela pamięć dla nowo utworzonego obiektu, Operator delete zwalnia pamięć Obiekty utworzone operatorem new nie mają nazwy to my decydujemy o czasie ich życia nie obowiązują zwykłe zasady o zakresie ważności należy nadać im wartość początkową
Strona 21 z 26 9. Podstawy programowania obiektowego Język C++ pozwala na zdefiniowanie własnego typu danych. class nowy_typ { składniki klasy metody (funkcje) klasy }; Składnikami w klasie mogą być dane różnego typu.
Strona 22 z 26 Składniki i funkcje występujące w klasie mogą być 1. public - dostęp do składników klasy mają funkcje z klasy ale także te które do tej klasy nie należą. 2. private - dostęp do składników mają tylko funkcje będące składnikami klasy. Składniki dane - mogą być odczytywane lub można coś do nich zapisać tylko wykorzystując funkcje z tej klasy, a funkcje mogą być wywoływane przez inne funkcje z tej klasy. 3. protected - dostęp taki jak do składników private ale mogą też z nich korzystać klasy pochodne.
Gdy zadeklarowano dwa elementy (obiekty) tej samej klasy funkcje składowe znajdują się w pamięci jednokrotnie. Gdy funkcja jest wywoływana na rzecz jednego z tych obiektów, to do jej wnętrza trafia adres tego obiektu. Tym adresem funkcja inicjalizuje sobie swój własny wskaźnik this. Wskaźnik ten pokazuje na którym konkretnie obiekcie tej klasy funkcja pracuje. Strona 23 z 26
Strona 24 z 26 Konstruktor jest to funkcja składowa, która 1. nazywa się tak samo jak klasa 2. nie ma wyspecyfikowanego żadnego typu wartości zwracanej (po słowie return może być tylko średnik) 3. ma na celu nadać wartości początkowe składnikom klasy. 4. jest wywyoływany automatycznie w chwili definicji każdego obiektu zaraz po przydziale pamięci. 5. może być przeładowana. Konstruktor domniemany jest to konstruktor, który może być wywoływany bez żadnych argumentów. Gdy w klasie brak konstruktorów, wówczas konstruktor domniemany jest generowany automatycznie. Klasa może zawierać tylko jeden konstruktor domniemany.
Strona 25 z 26 Destruktor - jest funkcja składowa o nazwie K(). Destruktor jako funkcja nie może zwracać żadnej wartości (nawet void), nie jest wywoływana z żadnymi argumentami. Funkcja ta jest wywoływana automatycznie gdy obiekt jest likwidowany. Zastosowanie: 1. Gdy konstruktor dokonał rezerwacji pamięci operatorem new, wtedy destruktor zwalnia pamięć operatorem delete. 2. Gdy liczymy obiekty danej klasy
Strona 26 z 26 Funkcja zaprzyjaźniona jest to funkcja, która nie jest składnikiem klasy ale ma dostęp do składowych prywatnych i chronionych tej klasy. Funkcja może być przyjacielem więcej niż jednej klasy. Aby funkcja była przyjacielem danej klasy należy jej deklarację poprzedzoną słowem friend umieścić wewnątrz klasy. Funkcja zaprzyjaźniona nie jest składnikiem klasy, nie ma wskaźnika this, pomimo, że będzie w klasie ciało tej funkcji. Funkcja zaprzyjaźniona może być składnikiem innej klasy.w przypadku funkcji przeładowanych przyjacielem jest ta, która dokładnie odpowiada specyfikacji podanej w klasie.