Wykład 2 - podstawy języka C++ Instytut Automatyki i Robotyki Warszawa, 2014
Wstęp
Plan wykładu Struktura programu. Zmienne i ich nazwy, podstawowe typy: całkowite, rzeczywiste, znakowe i napisowe. Instrukcje: czytania, pisania, przypisania. Klasyfikacja typów. Stałe, wyrażenia. Komentarze i dokumentacja programu. Dodawanie bibliotek. Przestrzenie nazw.
Struktura programu W oknie edycji kodu źródłowego ukazuje się standardowa zawartość pliku main.cpp z prostym programem wypisującym na konsoli napis Hello World!. #include <iostream> using namespace std; int main() { int a; cout << "Podaj liczbe: " << endl; cin >> a; cout << "Podana liczba to: " << a << endl return 0; }
Zmienne i ich nazwy Zmienną nazywa się dana mogąca przyjmować różne wartości. Każda zmienna występująca w programie ma swoją nazwę i przyjmuje wartości z określonego zbioru ( zdefiniowanego przez typ zmiennej) Wszystkie zmienne występujące w programie muszą być zadeklarowane przed ich pierwszym użyciem Popularne typy zmiennych całkowite: 10, -243, +78 rzeczywiste 1.5, 3.14, -2450.138 znakowe a, w, 1 napisowe podaj swoje imię:
Zmienne i ich nazwy Nazwa zmiennej Dowolny ciąg liter i cyfr zaczynający się od litery. Znak podkreślenia też jest literą. Małe i duże litery są rozróżniane. Definicja/deklaracja zmiennej Definicja zmiennej informuje o typie zmiennej i przydziela na nią pamięć. Definicja jest zarazem deklaracją, ale nie na odwrót (deklaracja polega tylko na określeniu typu zmiennej). i Najpierw podaje się typ, a potem wymienia nazwy wszystkich zmiennych tego typu. Zmienne tego samego typu można zgrupować w listę, oddzielając je przecinkami Zmienne mogą być definiowane w dowolnym miejscu, jak tylko zajdzie potrzeba ich wykorzystania.
Zmienne i ich nazwy Przykład definicji zmiennych prostych: int i,j,k; double x1,x2,y1,y2 ; y char w s k; string nazwa, opis;
Podstawowe typy danych Typ Typ jest zdefiniowany przez zbiór przyporządkowanych mu wartości Typy predefiniowane (najważniejsze): int - podzbiór liczb całkowitych: -2147483648.. 2147483647 float - podzbiór liczb rzeczywistych: 1.18 e-38.. 3.40 e38 double - podzbiór liczb rzeczywistych: 2.23 e-308.. 1.79 e308 bool - dwie wartości: true, false char - zbiór znaków w kodzie ASCII string - określa napis jako dowolny ciąg znaków (aby można było korzystać z umownego typu string, trzeba dołączyć odpowiednią bibliotekę: # include <string>)
Podstawowe typy danych Typy niestandardowe (definiowane przez użytkownika, do przechowania wielu wartości pod jedną nazwą): typ tablicowy typ strukturalny typ plikowy typy nieprzeliczalne typ obiektowy (w programowaniu obiektowym) typ wskaźnikowy i referencyjny typ wyliczeniowy
Instrukcje: czytania, pisania, przypisania Instrukcje Polecenia dla komputera - zmuszają go do przetwarzania danych podczas procesu obliczeniowego. W języku C++ każda instrukcja kończy się średnikiem Instrukcje pisania i czytania - plik z bibliotekami Instrukcje pisania i czytania wymagają dołączenia pliku nagłówkowego biblioteki iostream. Instrukcja czytania cin>> domyślnie czyta dane z klawiatury, instrukcja pisania cout<< domyślnie wyświetla dane na monitorze. Przestrzenie nazw Jeśli używa się wielu bibliotek z licznymi deklaracjami, można w końcu natknąć się na problem konfliktu nazw. Rozwiązaniem jest zastosowanie przestrzeni nazw, która jest zatem zbiorem obiektów, która ogranicza dostęp do nich - oprócz nazwy obiektu niezbędne jest też wspomnienie, z której przestrzeni nazw chcemy go użyć, obchodząc tym samym problem konfliktu nazw.
Instrukcje: czytania, pisania, przypisania Zastosowanie instrukcji pisania i czytania - określenie przestrzeni nazw #include <iostream> int main() { int a; std::cin >> a; std::cout << a; return 0; }
Instrukcje: czytania, pisania, przypisania Używając using namespace PrzestrzenNazw, podpowiadamy kompilatorowi, w którym miejscu może szukać używanych przez nas obiektów i funkcji, abyśmy mogli swobodnie używać wszystkiego co się znajduje w danej przestrzeni nazw Zastosowanie instrukcji pisania i czytania - ominięcie przestrzeni nazw #include <iostream> using namespace std; int main() { int a; cin >> a; cout << a; return 0; }
Instrukcje: czytania, pisania, przypisania Instrukcja przypisania - podstawienia Instrukcja przypisania służy do nadawania zmiennej nowej wartości Zastosowanie instrukcji przypisania int a; a = 10; // zmienna powinna być wcześniej zdefiniowana int b=-20; //definicja i przypisanie wartości int k = 3; double x = k-4.5; //zmniejsz wartość k - 4.5 k = k+1; // zwiększ wartość k o 1 double y = 2.5*(x+3)/2; char z = a ; string imie = "Witold ";
Definiowanie stałych Stałe Stałe definiujemy, jeśli chcemy je nazwać i używać ich nazw w programie. Definicja stałej musi zawierać jej inicjalizację, bo wartości stałych nie można zmieniać. Przykłady definicji stałych const n = 5; const int k = 2*(n+1); const double xmin = 0.001; const char Esc = \33 ; const string pytanie = "Czy wykonac ponownie - t/n";
Podstawowe wyrażenia Operatory arytmetyczne + : dodawanie / zachowanie znaku,? : odejmowanie / zmiana znaku, * : mnożenie, / : dzielenie, % : reszta z dzielenia (modulo), nie może być stosowany do liczb rzeczywistych. Operatory relacji >, >=, <, <= Operatory porównania ==,!= Operatory logiczne && - iloczyn logiczny (and) - suma logiczna (or)
Podstawowe wyrażenia Uwagi 1 Uwagi 2 Wyrażenia połączone operatorami relacji, porównania i logicznymi oblicza się od lewej do prawej Koniec obliczeń następuje natychmiast po określeniu wartości logicznej wyrażenia Operatory relacji mają wyższy priorytet niż operatory porównania Priorytet operatora && jest wyższy niż a oba są niższe niż operatorów relacji i porównania. Dla większości operatorów dwuargumentowych, można wykorzystywać specjalne operatory przypisania, pozwalające skrócić zapis często wykorzystywanych konstrukcji.
Podstawowe wyrażenia Wersja pełna i = i + 2; y = y * 2; x = x << 1; j = j * ( k + 1 ); flag = flag >> k;
Podstawowe wyrażenia Operatory bitowe & : bitowa koniunkcja (and), : bitowa alternatywa (or), ˆ: bitowa różnica symetryczna (xor) << : przesunięcie w lewo >> : przesunięcie w prawo, : dopełnienie jedynkowe
Podstawowe wyrażenia Wersja skrócona i += 2; y *= 2; x <<= 1; j *= k + 1; flag >>= k;
Komentarze i dokumentacja programu Komentarze są ignorowane przez kompilator, służą wyłącznie osobie czytającej tekst programu. Komentarze zapisuje się wewnątrz par znaków /*...*/ (typ 1), co pozwala tworzyć komentarze złożone z wielu linii, lub pomiędzy znakami // (typ 2) a końcem linii. Dwa różne typy komentarzy pozwalają tworzyć komentarze zagnieżdżone W praktyce komentarze są bardzo przydatne. Istnieją tzw. generatory dokumentacji, które na podstawie odpowiednio ustawionych komentarzy, zgodnie z określoną konwencją, potrafią stworzyć automatycznie dokumentację pisanego oprogramowania. Przykłady narzędzi tego typu to np. Doxygen, ApiGen, EpyDoc.
Komentarze i dokumentacja programu Przykład komentarzy i komentarzy zagnieżdżonych: #include <conio> // ten plik nagłówkowy należy //dołączyć, jeśli chcemy używać instrukcji // getch( ); /* Zobaczymy, co się stanie, jeśli w programie // nie będzie instrukcji getch( );na końcu. getch( ); // to oznacza: poczekaj, aż użytkownik // wciśnie jakiś przycisk; // ta instrukcja zatrzymuje więc działanie programu, //dzięki czemu wyniki pozostają na ekranie, dopóki nie wciśniemy jakiegoś przycisku */
Dodawanie bibliotek - biblioteki i pliki nagłówkowe Plik nagłówkowy plik zawierający deklaracje zmiennych i funkcji tworzących bibliotekę. Powinien być określony na początku pliku z programem. Format dołączania plików nagłówkowych # include <iostream> - sposób standardowy. iostream jest nazwą dołączanej biblioteki języka C++ # include <iostream.h> - starszy sposób. Uwaga Dołączane standardowe biblioteki i pliki nagłówkowe mogą pochodzić z języka C (stdio, stdlib, math), lub z języka C++ (cstdio, cstdlib, cmath)