Podstawy Informatyki Inżynieria Ciepła, I rok Wykład 10 Kurs C++
Historia Lata 70-te XX w język C (do pisania systemów operacyjnych) "The C programming language" B. Kernighan, D. Ritchie pierwszy standard Koniec lat 80 standard ANSI C 1983 - C++ (Bjarne Stroustrup) Do chwili obecnej nie stosuje się jednego standardu!
Kompilatory C++ Microsoft Visual C++ (w ramach licencji MSDN AA) Darmowe: Linux (PC), Solaris (SUN) : http://gcc.gnu.org/ - g++ Windows : http://www.bloodshed.net/dev/devcpp.html - Dev-C++ http://www.delorie.com/djgpp/ - DJGPP http://www.mingw.org/ - MinGW
Kompilacja nagłówki moduły biblioteki *.cpp kompilator linker programm błędy błędy UNIX Kompilacja: 1) g++ prog.cpp 2) g++ -o prog prog.cpp Uruchomienie: 1) a.out 2) prog
Pierwszy program #include <iostream> #include <string> using namespace std; int main() { string komunikat; double a,b,c; komunikat = "Koniec obliczeń"; cout <<"Podaj a i b: "; cin >>a>>b; c=a+b; cout <<" suma "<<a<<" i "<<b<<" wynosi "<<c<<'\n'; cout<<komunikat<<'\n'; return 0; }
Dyrektywy preprocesora #include <iostream> Program przed kompilacją dołącza zewnętrzne pliki np pliki nagłówkowe, biblioteki. Biblioteka iostream (ang. input/output stream) - strumień wejścia/wyjścia. Biblioteka ta umożliwia wprowadzanie informacji ze standardowych urządzeń wejścia (klawiatura) i kierowanie ich do urządzeń wyjścia (ekran). Iostream wspiera kontrolę typów, co sprzyja zmniejszeniu liczby popełnianych błędów oraz umożliwia tworzenie rozszerzeń - klasy biblioteki można dziedziczyć.
Obiekty wejścia/wyjścia cin standardowe wejście, z reguły jest to klawiatura, odpowiada to wskaźnikowi stdin, cout standardowe wyjście, z reguły jest to ekran, odpowiada to wskaźnikowi stdout, cerr standardowe wyjście dla błędów, z reguły ekran, odpowiada wskaźnikowi stderr, clog w pełni buforowana wersja cerr. Podobne biblioteki fstream - operacja wejścia/wyjścia na plikach zewnętrznych. sstream - operacja wejścia/wyjścia na obiektach klasy string cstdio - operacja wejścia/wyjścia, biblioteka języka C.
Fragment pliku iostream: extern _IO_istream_withassign cin; // clog->rdbuf() == cerr->rdbuf() extern _IO_ostream_withassign cout, cerr; string #include <string> Łańcuchy znaków w stylu języka C są częstą przyczyną błędów programu, a na dodatek ich używanie jest dosyć kłopotliwe. Nic wiec dziwnego, że biblioteka standardowa posiada zaimplementowaną uogólnioną klasę napisów zwaną string. Taka klasa daje jednolity, niezależny od systemu i bezpieczny interfejs do manipulowania napisami.
Zdefiniowanie przestrzeni nazw: using namespace std; Podczas pracy nad dużymi programami, w których używa się wielu bibliotek z licznymi deklaracjami, możemy w końcu natknąć się na problem konfliktu nazw - gdy kilka obiektów, typów czy funkcji ma tę samą nazwę. Rozwiązaniem może być np. zamknięcie nazw w "zakresach", w celu oddzielenia ich. Z pomocą przychodzi nam mechanizm przestrzeni nazw. Bez zdefiniowanej domyślnej przestrzeni fragment naszego programu wyglądał by tak: std::cout <<"Podaj a i b: "; std::cin >>a>>b; itd. W przestrzeni nazw std znajdziemy mnóstwo różnych narzędzi, bardzo przydatnych funkcji, np. sortowania.
Program główny int main() {...... return 0; } Program główny traktowany jest jak funkcja musi zwrócić jakąś wartość (typu integer) Zwracając do systemu operacyjnego wartość 0 informujemy, że program zakończył się bez błędu.
Deklaracja zmiennych string komunikat; double a,b,c; short int - typ całkowity krótki int - typ całkowity. long int - typ całkowity długi float - typ zmiennoprzecinkowy pojedynczej precyzji. double - typ zmiennoprzecinkowy podwójnej precyzji. long double - typ zmiennoprzecinkowy podwójnej precyzji długi. char - typ znakowy string ciąg znaków Nazwy zmiennych mogą składać się z liter,cyfr i podkreślenia _ Nazwa nie może się zaczynać od cyfry unsigned zmienna bez znaku (tylko dodatnia) dla typów int int ( 127,128) unsigned int (0,255)
Tablice int calkowite[20]; - przechowuje 20 liczb typu int char znaki[5]; - p. 5 znaków double liczby[1000]; - p. 1000 liczb typu double string napisy[5]; - p. 5 napisów (wieloznakowych) Uwaga! Rozmiar tablicy musi być podany przed kompilacją znaki[0] - pierwszy element tablicy znaki znaki[4] piąty element tablicy
int calk[5]={2,-3,4,8,12}; int aa[3]={12,-3}; Inicjacja tablicy Nie zainicjowane wyrazy otrzymują wartość 0 Nie zainicjowana tablica ma nieokreślone wartości. int bb[3]={2,-3,4,8}; //Kompilator wykaże błąd! a=bb[4] program nie zasygnalizuje błędu, ale przeczyta nieprzewidywalne dane!
Operatory komunikat = "Koniec obliczeń"; c=a+b; operator przypisania = operator dodawania + operator odejmowania - operator mnożenia * operator dzielenia / operator reszty z dzielenia (modulo) % operator znaku liczby (np. -45)
Operatory złożone += zmienna += 2 zmienna = zmienna + 2 - = zmienna -= 7 zmienna = zmienna - 7 *= zmienna *= 3 zmienna = zmienna * 3 /= zmienna /= 5 zmienna = zmienna / 5 %= zmienna %= 3 zmienna = zmienna % 3
Operatory inkrementacji i dekrementacji ++ zwiększenie wartości o 1, np. i++ to jest to samo co i=i+1 -- zmniejszenie wartości o 1, np. i-- to jest to samo co i=i-1 Uwaga! Operatory te można stosować przed i po zmiennej, tzn. liczba++ lub ++liczba. Podobnie dla --. Mimo, że działanie operatora w obu wypadkach jest podobne, to nie jest jednak identyczne! ++liczba najpierw dodaje do liczby 1, a potem zwraca jej wartość liczba++ najpierw zwraca wartość, a potem dodaje liczba =5; a) cout<<++liczba; drukuje 6 b) cout<<liczba++; drukuje 5 a liczba jest po instrukcji a lub b zawsze równa 6
== równa się!= jest różne > jest większe >= jest większe lub równe < jest mniejsze <= jest mniejsze lub równe Operatory relacji Operatory logiczne suma - prawdziwe jeśli którekolwiek z wyrażeń jest prawdziwe && iloczyn - prawdziwe jeśli oba wyrażenia są prawdziwe! negacja logiczna - powoduje zaprzeczenie wyrażenia Uwaga! Przypisanie = zwraca wartość przypisania czyli np. a=3 zwraca wartość 3, a każda liczba różna od zera jest w języku C++ traktowana jako prawda. Tylko wartość 0 jest traktowana jako fałsz. (a=2) (3==5) zawsze prawda; (a==2) (3==5) niekoniecznie
Opercje wejścia i wyjścia Strumienie biblioteka iostream cout - powiązany ze standardowym urządzeniem wyjścia cin - powiązany ze standardowym urządzeniem wejścia cerr - strumień błędów - połączony ze standardowym urządzeniem wyjścia clog - podobnie jak cerr, ale buforowany << - operator wysyłania do strumienia >> - operator pobierania ze strumienia np. cin >>a>>b; cout <<x1; cout <<y1<<' '<<y2<<'\n';