Jazyk C++ Jazyk C++ je nástupcem jazyka C. C++ obsahuje skoro celý jazyk C, ale navíc přidává vysokoúrovňové vlastnosti vyšších jazyků. Z toho plyne, že (skoro) každý platný program v C je také platným programem v C++. Tato moderní proměna jazyka C v sobě spojuje sílu tradičního "céčka" a navíc přidává vysokoúrovňové vlastnosti vyšších jazyků. Hlavním rozdílem mezi C a C++ je způsob programování. C je ryze procedurální jazyk, tzn., že zdůrazňuje algoritmy (pozn. program jako takový se skládá ze dvou částí: dat a algoritmů. Data jsou informace, které program používá, zpracovává nebo vytváří pomocí algoritmů). Naproti tomu C++ je objektově orientovaný jazyk, tzn., že zdůrazňuje data. Myšlenka OOP spočívá v návrhu datových tříd, které popisují určitý souhrn vlastností a jak s těmito vlastnostmi zacházet. A teď je ta správná chvíle vysvětlit, co je to vlastně ten objekt. Představme si to na třídě, která bude reprezentovat nějakého sportovce. Dejme tomu že bude obsahovat jméno, sport, který vykonává, jestli má psa a kolik vydělává. No a objektem je konkrétní sportovec: Pepa Novák, atlet, má psa a vydělává 20000Kč. Objektů (neboli instancí dané třídy) může být nekonečně mnoho (přesněji závisí na velikosti paměti počítače). Další příklad zahrne do návrhu třídy i metody (něco na způsob funkcí). Dejme tomu že vytváříte program pro práci s grafikou. Program by měl umět nakreslit třeba trojúhelník. Dobrá, navrhneme tedy třídu reprezentující trojúhelník. Bude obsahovat nějaké vlastnosti, třeba barvu a souřadnice rohů. To bychom měli datovou část. Část určující činnosti (metody) objektu bude obsahovat definice metod pro posunutí, rotaci nebo třeba změnu barvy. Tak a teď když máme navrženou třídu, můžeme vytvořit konkrétní objekt o určitých souřadnicích a barvě a můžeme ho pomocí jeho metod posouvat, nebo otočit. Celý program se poté skládá z velkého počtu objektů vytvořených na základě tříd. Programy v C++ můžou používat i softwarové knihovny jazyka C, C++ má ale svoje vlastní, lepší, podporující OOP (pozn. knihovny jsou kolekce programových modulů, které můžeme volat z našeho programu. Jsou to ověřená řešení mnoha problémů, jako je práce s řetězci - což je v C/C++ obzvláště velký problém. Ušetří tak mnoho času a úsilí). Obecně se má za to, že C/C++ jsou jazyky složité. Je to pravda. Není to ani tak kvůli syntaxi jazyka, ta je naopak relativně jednoduchá. Je to spíše tím, že tyto jazyky umožňují snad všechno, na co si vzpomenete (to však bývá i kamenem úrazu, zvlášť když dotyčný neví co dělá příkladem může být práce s adresami). Je k nim k dispozici obrovské množství knihoven a není v lidské moci ovládat celou stránku tohoto jazyka.
Kód #include
using namespace std; int main(void) { cout << "Hello world!" << endl; cin.get(); return 0; }
#include nám k projektu přidá knihovnu pro výstup (a vstup) na konzoli.
using namespace std nám zjednoduší názvy věcí z knihovny iostream.
int main(void) {} - Main je tzv. funkce, zde ta hlavní. O funkcích si něco povíme později. Do složených závorek za ní budeme zatím psát všechen kód. Funkce main se spustí při spuštění aplikace.
cout << "Hello world!" << endl; je samotný výpis textu. Text píšeme do uvozovek (""), program poznal, že se nejedná o nějaký příkaz. << endl nám ještě odřádkuje na nový řádek.
cin.get()čeká na stisk klávesy Enter, takže se nám program hned nevypne.
return 0 - Příkazem return ukončíme program a nulou řekneme systému, že program skončil v pořádku. (Pokud dojde v programu k chybě, použije se místo nuly jednička).
Proměnné Proměnná je v informatice je to místo v paměti počítače, kam si můžeme uložit nějaká data (např. jméno uživatele). Toto místo má podle typu proměnné také vyhrazenou určitou velikost, kterou proměnná nesmí přesáhnout (např. číslo nesmí být větší než 2 147 483 647). Proměnná má vždy nějaký datový typ, může to být číslo, znak, text a podobně, záleží na tom, k čemu ji chceme používat. Většinou musíme před prací s proměnnou tuto proměnnou nejdříve tzv. deklarovat, čili říci jazyku jak se bude jmenovat a jakého datového typu bude (jaký v ní bude obsah). Jazyk ji v paměti založí a teprve potom s ní můžeme pracovat. Podle datového typu proměnné si ji jazyk dokáže z paměti načíst, modifikovat, případně ji v paměti založit. O každém datovém typu jazyk ví, kolik v paměti zabírá místa a jak s tímto kusem paměti pracovat. C++ je staticky typovaný jazyk, všechny proměnné musíme nejprve deklarovat s jejich datovým typem. Nevýhodou je, že díky deklaracím je zdrojový kód poněkud objemnější a vývoj pomalejší. Obrovskou výhodou však je, že nám kompiler před spuštěním zkontroluje, zda všechny datové typy sedí. Dynamické typování (bez deklarace proměnných) sice vypadá jako výhodné, ale zdrojový kód není možné automaticky kontrolovat a když někde očekáváme objekt uživatel a přijde nám tam místo toho desetinné číslo, odhalí se chyba až za běhu a interpret program shodí.
Naopak C++ nám nedovolí program ani zkompilovat a na chybu nás upozorní (to je výhoda kompilace). Tři základní datové typy jsou:
Celá čísla: int
Desetinná čísla: float
Textový řetězec: string
int a; a = 56; cout << a << endl; cin.get();
Přikládek #include #include <string> #include using namespace std; int main(void) { cout << "Napiš něco a já to dvakrát zopakuju" << endl; string vstup; //deklarace proměnné cin >>vstup; //načtení proměnné, načte pouze jedno slovo string vystup; vystup=vstup+","+vstup; cout<
Parsování Parsováním se myslí převod z textové podoby na nějakou specifickou hodnotu, např. číslo. Mnoho datových typů má v C++ již připraveny funkce k parsování, pokud budeme chtít naparsovat např. int ze stringu, budeme postupovat takto: string s = "56"; int a = atoi(s.c_str());
Kalkulačka { float a, b; cout << "Zadejte cin>>a; cout << "Zadejte cin>>b; float soucet = a float rozdil = a float soucin = a
prvni cislo" << endl; druhe cislo" << endl; + b; - b; * b;
} cout
<<"Součet čísel " <
cout <<"Rozdíl čísel " <
Celočíselné datové typy
Desetinná čísla
Další vestavěné datové typy
Char reprezentuje jeden znak, na rozdíl od stringu, který reprezentoval celý řetězec charů. Znaky v C++ píšeme do apostrofů: char c = 'A';
l
Bool nabývá dvou hodnot: true (pravda) a false (nepravda). Používáme jej hlavně u podmínek bool b = false; bool vyraz = (15 > 5);
cout << b << endl; cout << vyraz << endl; cin.get();
Logické operátory
Větvení Rozhodněte, zda je zadané číslo kladné nebo záporné int main() { float a; cout << "Zadej cislo a rozhodni, je-li kladne nebo zaporne" << endl; cin>>a; if (a<0) cout<<"Cislo je zaporne" <<endl; else if (a>0) cout<<"Cislo je kladne" <<endl; else cout<<"Cislo je nula" <<endl; return 0; }
Vypočítejte obvod a obsah obdélníku a kruhu #include #include<math.h> using namespace std; int main() { float a,b,o,S; cout << "Zadejte sirku obdelniku: " << endl; cin >>a; cout << "Zadejte delku obdelniku: " << endl; cin >>b; o= 2*(a+b); S= a*b; cout <<"Obvod obdelniku je "<
float r, obvod, obsah; cout << "Zadejte polomer kruhu: " << endl; cin>>r; obvod = 2*M_PI*r; obsah = M_PI*r*r; cout << "Obsah kruhu je " << obsah<<", obvod kruhu je "<