Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje 1 dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD
programowania w C++ Typy c.d. 2
Typy zmiennych Instrukcja typedef - pozwala na nadanie dodatkowej nazwy już istniejącemu typowi. Np.: Albo: typedef unsigned int wiek; wiek Ania, Tomek; // to samo co: unsigned int Ania, Tomek; typedef int * wsk_na_int; Instrukcja typedef nie wprowadza nowego typu, a jedynie synonim do typu już istniejącego 3
Typy wyliczeniowe enum Jest to osobny typ dla liczb całkowitych, a właściwie lista wartości stałych całkowitych Const Int. Deklaracja typu wyliczeniowego składa się ze słowa kluczowego enum następnie nazwy (opcjonalnie), po której znajduje się w nawiasach klamrowych lista elementów oddzielonych przecinkami. Pierwszy element na liście ma domyślnie wartość 0, następny - wartość 1, 2, 3 itd.. 4
Typy wyliczeniowe enum Można zdefiniować wartość początkową lub też wszystkie wartości stałych. 5
programowania w C++ Operatory 6
Operatory Operatory arytmetyczne: a = b + c ; // dodawanie a = b c ; // odejmowanie a = b * c ; // mnożenie a = b / c ; // dzielenie a = b % c ; // modulo reszta z dzielenia Priorytet operatorów arytmetycznych jest taki sam, jak w matematyce. Czyli zapis: a + b % c * d - f oznacza to samo co a + ((b % c) * d) - f 7
Operatory Operatory inkrementacji i dekrementacji i++ ; // inkrementacja - oznacza to: i = i + 1 i - - ; // dekrementacja oznacza to: i = i 1 Operatory te mogą mieć dwie formy: Prefix: ++a (przed argumentem) - najpierw zmienna jest zwiększana o 1, następnie ta zwiększona wartość staje się wartością wyrażenia. Postfix: a++ (po argumencie) - najpierw brana jest stara wartość zmiennej i ona staje się wartością wyrażenia, a następnie zwiększany jest on o 1 8
Operatory Operator przypisania Każde przypisanie samo w sobie jest także wyrażeniem mającym taką wartość, jaka jest przypisywana. Zatem wartość wyrażenia: (x = 2) jako całości jest także 2 9
Operatory logiczne Operatory relacji < mniejszy <= mniejszy lub równy > większy >= większy lub równy == czy równy!= czy różny Uwaga na błąd: int a = 10; int b = 20; if (a=b) // zamiast if (a==b) Nie jest błędem, tyle że oznacza if (20).. // ogólnie if (b!= 0).. 10
Operatory logiczne Operatory sumy logicznej i iloczynu I I - sumę logiczną - operację logiczną LUB (alternatywa) && - iloczyn logiczny - czyli operację I (koniunkcja) prawda" daje rezultat 1, a wynik fałsz" daje rezultat 0 Wyrażenia logiczne tego typu obliczane są od lewej do prawej. Kompilator oblicza wartość wyrażenia dotąd, dopóki na pewno nie wie jaki będzie wynik. Np.: jeżeli w wyrażeniu (a == 0) && (b!=10 ) && (c > 100) A będzie różne od zero, kolejne porównani nie będą wyliczane 11
Operatory logiczne Operatory bitowe & - iloczyn logiczny - suma logiczna ^ - różnica symetryczna - xor ~ - negacja >> - przesunięcie w prawo << - przesunięcie w lewo 12
Operatory logiczne Przykład: m 0000 1111 0000 1111 k 0000 1111 1111 0000 m & k 0000 1111 0000 0000 m I k 0000 1111 1111 1111 ~m 1111 0000 1111 0000 m ^ k 0000 0000 1111 1111 13
Operatory logiczne Przykład przesunięcie bitowe: zmienna «ile_miejsc //przesunięcie w lewo zmienna» ile_miejsc //przesunięcie w prawo 14
Operatory logiczne Przykład: a 0100 0000 1111 0010 <-000 w 010 0000 0111 1001 0000 15
Operatory logiczne Przykład: d 0000 1111 1111 0000 r 0000 0001 1111 1110 16
Operatory logiczne Więcej operatorów przypisania: i+= 2 oznacza i = i + 2 i-= 2 oznacza i = i - 2 i*= 2 oznacza i = i * 2 i/= 2 oznacza i = i / 2 i%= 2 oznacza i = i % 2 i>>=2 oznacza i = i>> 2 i<<=2 oznacza i = i<< 2 i&= 2 oznacza i = i & 2 i = 2 oznacza i = i 2 i^= 2 oznacza i = i ^ 2 17
Operatory logiczne Wyrażenie warunkowe zmienna = warunek? wyrażenie1 : wyrażenie2; Daje taki sam rezultat, jak: if (warunek) zmienna = wyrażenie1; else zmienna = wyrażenie2; Przykładowo: a = (i > 4)? 15 : 10; 18
Operatory logiczne Wyrażenie warunkowe przykład: 19
Operatory logiczne Operator przecinek: Jeśli kilka wyrażeń stoi obok siebie oddzielone przecinkiem, to ta całość jest także wyrażeniem, którego wartością jest wartość wyrażenia będącego najbardziej z prawej. Np.: wartością wyrażenia (2 + 4, a * 4, 3 < 6, 77 + 2) jest równa 79. Poszczególne wyrażenia obliczane są od lewej do prawej. 20
Operatory logiczne Łączność operatorów: Lewostronna łączność operatora + oznacza, że wyrażenie a + b + c + d + e odpowiada wyrażeniu ((((a + b)+ c) + d) + e) Prawostronna łączność operatora dwuargumentowego = oznacza, że wyrażeniu a = b = c = d = e odpowiada wyrażenie (a = (b = (c = (d = e)))) 21
programowania w C++ Funkcje 22
Funkcje Deklaracja funkcji (nagłówki funkcji) Funkcja ma swoją nazwę, która ją identyfikuje. Wszystkie nazwy - przed pierwszym odwołaniem się do nich muszą zostać zadeklarowane. Wymagana jest więc także deklaracja nazwy funkcji. 23
Funkcje 24
Funkcje Przesyłanie argumentów do funkcji przez wartość Załóżmy, że mamy funkcję: Parametry formalne W programie wywołujemy tę funkcję tak: Parametry aktualne 25
Funkcje - Przesyłanie argumentów do funkcji przez wartość Argumenty przesłane do funkcji przez wartość - są tylko kopiami. Jakiekolwiek działanie na nich nie dotyczy oryginału. Wywołując powyższą funkcję w następujący sposób: Otrzymamy: 26 Przed wywołaniem, aktu = 2 W funkcji modyfikuje arg formalny i teraz arg formalny = 1002 Po wywołaniu, aktu = 2
Funkcje - Przesyłanie argumentów do funkcji przez referencję Przesyłanie argumentów przez referencję int nasza_funkcja (int &zmienna); Wywołując funkcję o powyższej deklaracji w następujący sposób: int a1=100; nasza_funkcja(a1); zamiast wartość zmiennej a1 (liczby 100), do funkcji został wysłany adres zmiennej a1. Na jego podstawie w funkcji stworzona została referencja zmiennej a1 druga nazwa dla tego samego obiektu w pamięci operacyjnej. Funkcja może modyfikować wartość zmiennej przekazanej przez referencję. 27
Funkcje Argumenty domniemane int nasza_funkcja (int a =100, int argument = 0); Nasa_funkcja(10, 10); Argument = 10; Nasa_funkcja(10); Argument = 0;. 28
Literatura: W prezentacji wykorzystano przykłady i fragmenty: Grębosz J. : Symfonia C++, Programowanie w języku C++ orientowane obiektowo, Wydawnictwo Edition 2000. Jakubczyk K.: Turbo Pascal i Borland C++ Przykłady, Helion. Warto zajrzeć także do: Sokół R. : Microsoft Visual Studio 2012 Programowanie w Ci C++, Helion. Kerninghan B. W., Ritchie D. M.: język ANSI C, Wydawnictwo Naukowo Techniczne. Dla bardziej zaawansowanych: Grębosz J. : Pasja C++, Wydawnictwo Edition 2000. Meyers S.: język C++ bardziej efektywnie, Wydawnictwo Naukowo Techniczne 29