Úvod. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík,2016

Podobné dokumenty
Úvod. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík,2016

Úvod. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze

Preprocesor. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016

Algoritmizace. Cíle předmětu

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Ukazatele, dynamická alokace

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

PROGRAMOVÁNÍ V C++ CVIČENÍ

Algoritmizace a programování

IUJCE 07/08 Přednáška č. 1

8 Třídy, objekty, metody, předávání argumentů metod

Více o konstruktorech a destruktorech

DTP Základy programování Úvod do předmětu

Algoritmizace a programování

11. Přehled prog. jazyků

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

Algoritmizace a programování

PB161 Programování v jazyce C++ Přednáška 4

Programování v C++ 3, 3. cvičení

Jazyk C# (seminář 6)

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

PB161 Programování v jazyce C++ Přednáška 1

PB161 Programování v jazyce C++ Přednáška 7

PB161 Programování v jazyce C++ Přednáška 7

Programování v C++ 1, 1. cvičení

Matematika v programovacích

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Jazyk C++, některá rozšíření oproti C

PB161 Programování v jazyce C++ Přednáška 10

Šablony, kontejnery a iterátory

PB161 Programování v jazyce C++ Přednáška 1

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

PB přednáška (23. listopadu 2015)

Abstraktní třídy, polymorfní struktury

Funkční objekty v C++.

Dědění, polymorfismus

PB161 Programování v jazyce C++ Přednáška 4

Práce s knihovnami. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016

Operační systémy. Cvičení 3: Programování v C pod Unixem

Šablony, kontejnery a iterátory

Programovací jazyk C++ Hodina 1

Programování v C++ 1, 17. cvičení

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Algoritmy I. Cvičení č. 2, 3 ALGI 2018/19

Hrátky s funkcemi. PV173 Programování v C++11. Vladimír Štill, Jiří Weiser. Fakulta Informatiky, Masarykova Univerzita. 29.

Struktura programu v době běhu

Jazyk C++ II. Šablony a implementace

Pole a kolekce. v C#, Javě a C++

Programování v C++ 2, 4. cvičení

Úvod do programovacích jazyků (Java)

Programování v jazyce C a C++

Algoritmizace. Algoritmizace (Y36ALG), Šumperk - 1. přednáška 1

Programování v C++ 1, 14. cvičení

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

PB161 Programování v jazyce C++ Přednáška 10

1 Nejkratší cesta grafem

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Pokročilé programování v jazyce C pro chemiky (C3220) Úvod do jazyka C++

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

Dynamika objektů. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze

Vector datový kontejner v C++.

Programování v C++ 1, 5. cvičení

Programování v Javě I. Leden 2008

PREPROCESOR POKRAČOVÁNÍ

Úvod do jazyka C. Zdroje: Herout: Učebnice jazyka C, Kopp, České Budějovice, 2001 Schildt H: Nauč se sám C, Softpress, Praha, 2001

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Operační systémy. Cvičení 4: Programování v C pod Unixem

<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************

Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem

Programování v Javě I. Únor 2009

Třídy a struktury v C++

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

Mělká a hluboká kopie

Programování a algoritmizace

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí

PB161 Programování v jazyce C++ Přednáška 8

typová konverze typová inference

Úvod do programování - Java. Cvičení č.4

BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky

Polymorfismus. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 30.března

for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; }

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

Úvod. Programovací paradigmata

Programovací jazyk C(++) C++ area->vm_mm->locked_vm -= len >> PAGE_SHIFT;

1. Programování proti rozhraní

přetížení operátorů (o)

Základy C++ I. Jan Hnilica Počítačové modelování 18

PROGRAMOVÁNÍ V C++ URČENO PRO VZDĚLÁVÁNÍ V AKREDITOVANÝCH STUDIJNÍCH PROGRAMECH ROSTISLAV FOJTÍK

Šablonové metaprogramování v C++ Miroslav Virius KSI FJFI ČVUT

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

Digitální učební materiál

Jazyk C++ I. Šablony

KTE / ZPE Informační technologie

Transkript:

Úvod Karel Richta a kol. katedra počítačů FEL ČVUT v Praze Karel Richta, Martin Hořeňovský, Aleš Hrabalík,2016 Programování v C++, xxb36pjc 2016, Lekce 1 https://cw.fel.cvut.cz/wiki/courses/a7b36pjc/start

Protože... Proč se učit C++?... se ve vašem oboru používá... chcete psát rychlý kód... chcete aby vás váš počítač zcela poslouchal... znáte C a nestačí vám... znáte Python a chcete poznat svět z jiné strany...... vám bylo dáno jako povinný předmět 2

Kde se tedy C++ používá? 3

Počítačová grafika Unreal Engine, idtech, CryEngine, Unity,... 4

Analýza dat CERN Root 5

Produkční software CAD/CAM, editory, modeláře (Autodesk, Adobe...) 6

Burza a finance High Frequency Trading, Bloomberg 7

Real-time systémy Průmyslové technologie, na obrázku: Mars Rover 8

Robotika Robot Operating System 9

Zdravotnická zařízení Diagnostika, MRI, kardiostimulátory aj. 10

Vlastnosti jazyka C++ Je převážně zpětně kompatibilní s jazykem C Umožňuje vysokou úroveň abstrakce S nulovou, nebo minimální cenou Dává poslední slovo programátorovi Podporuje řadu programovacích stylů Umožňuje přístup až k hardwaru počítače 11

Kompatibilita C a C++ C C++ funkce, ukazatele, operátory,... třídy, metody, přetěžování operátorů, šablony, reference,... zřídka používané jazykové konstrukce C (např. K&R notace zápisu funkcí) 12

Vysoká úroveň abstrakce C++ obsahuje nejenom funkce, třídy, objekty Které jazyky dneska ne? Ale i šablony Parametrizace kódu dle typů Anonymní funkce, funkce vyššího řádu funkce jako samostatný typ A velmi silný typový systém V tomto předmětu se vám kouzla s ním vyhnou 13

Programátor má poslední slovo Filozofie C++ říká, že je důležitější umožnit nějaké použití, než zabránit všem chybám Není vždy výhoda C++ takto skončilo s turing-complete šablonami Programátor má možnost přehlasovat typový systém. Ale pokud nemá pravdu, tak pak bude mít problém 14

Programovací styly v C++ K dispozici je několik programovacích stylů: procedurální programování objektově orientované programování funkcionální programování metaprogramování se šablonami C++ je imperativní programovací jazyk, tzn. podstatou programování je tvorba příkazů. 15

Spolupráce s hardwarem Přímý přístup k paměti pomocí ukazatelů. Knihovny a ovladače umožňují práci se službami operačního systému, např. se sítěmi, souborovým systémem, správou paměti, standardním vstupem a výstupem se zařízeními, např. s grafickou kartou, tiskárnou, čtečkou SD karet 16

Martin Richards 1967 Ken Thompson 1972 Dennis Ritchie Brian Kernighan 1978 (K&R C) Historie C a C++ BCPL B C C89 "ANSI C" Jazyk C vznikl jako systémový jazyk pro operační systém Unix (aby se nemusel psát v asembleru). C with Classes C++ Bjarne Stroustrup 1979 1985 ANSI C - X3J11 (ISO WG14 1990) C99 ARM C++ C++98 C++03 ISO WG21, ISO/IEC 14882 (ANSI C++ - X3J16, 1998). C11 C++11 C++14 17

Program v C++ je sada funkcí main funkce1 funkce2 funkcen 18

Jedna z nich se jmenuje main main funkce1 funkce2 funkcen 19

Funkci main spustí OS OS main funkce1 funkcen funkce2 20

Funkce spolu komunikují (volají se) OS main funkce1 funkcen funkce2 21

Případně i rekurzivně OS main funkce1 funkcen funkce2 22

Předávají si parametry OS main 123 alfa funkce1 3.14 funkcen beta funkce2 23

A vracejí výsledky OS 0 main 123 alfa true funkce1 3.14 4 0 funkcen beta funkce2 24

Navíc existuje globální paměť OS 0 main alfa true 123 funkce1 3.14 globální proměnné 4 0 funkcen beta funkce2 25

Některé funkce jsou připraveny v knihovnách funkcí OS main std::printf <cstdio> true "alfa" 123 funkce1 4 44 "0044" std::stoi <string> 26

Vstup a výstup v C++ Každý program se chápe jako filtr filtruje vstupní data na výstupní. Každý program proto má standardní vstup (cin console input), standardní výstup (cout console output), výstup pro hlášení chyb (cerr console errors, clog console log). Vstup pomocí >> std::cin >> x; cin cout Výstup pomocí << filtr std::cout << x; Konec řádku: "\n" nebo endl cerr, clog std::cout << "\n"; std::cout << std::endl; 27

Příklad Hello, world! v C++ << znamená vypiš na výstup OS "Hello, world!\n" main 0 << cout #include <iostream> int main() { std::cout << "Hello, world!\n"; } 28

Struktura programu v C++ Program v C++ realizující řešení problému je sada definic tříd a funkcí, jedna z funkcí se jmenuje main a ta představuje hlavní program, který se spustí. Funkce main pak případně volá jiné funkce, či metody realizované ve třídách. Definice funkce main má např. tvar: #include <iostream> int main() { std::cout << "Priklad tisk vstupu do zadani nuly\n"; int hodn; do { std::cin >> hodn; std::cout << "Hodnota = " << hodn << "\n"; } while (hodn!= 0); std::cout << "Konec\n"; } 29

Formát zápisu programu v C není předepsán #include <stdio.h> int main(int t, int _, char *a){return!0<t?t<3?main(-79,-13,a+main(-87,1-_, main(-86,0,a+1)+a)):1,t<_?main(t+1,_,a):3,main(-94,-27+t,a)&&t==2?_<13? main(2,_+1,"%s %d %d\n"):9:16:t<0?t<-72?main(_,t, "@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l,+,/n{n+,/+#n+,/#\ ;#q#n+,/+k#;*+,/'r :'d*'3,}{w+k w'k:'+}e#';dq#'l \ q#'+d'k#!/+k#;q#'r}ekk#}w'r}ekk{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# \ ){nl]!/n{n#'; r{#w'r nc{nl]'/#{l,+'k {rw' ik{;[{nl]'/w#q#n'wk nw' \ iwk{kk{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c \ ;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')# \ }'+}##(!!/") :t<-50?_==*a?putchar(31[a]):main(-65,_,a+1):main((*a=='/')+t,_,a+1) :0<t?main(2,2,"%s"):*a=='/' main(0,main(-61,*a, "!ek;dc i@bk'(q)-[w]*%n+r3#l,{}:\nuwloca-o;m.vpbks,fxntdceghiry"),a+1);} Zdroj: Wikipedia, International Obfuscated C Code Contest

Výstup tohoto programu On the first day of Christmas my true love gave to me a partridge in a pear tree. On the second day of Christmas my true love gave to me two turtle doves and a partridge in a pear tree. On the third day of Christmas my true love gave to me three French hens, two turtle doves and a partridge in a pear tree. On the fourth day of Christmas my true love gave to me four calling birds, three French hens, two turtle doves and a partridge in a pear tree. On the fifth day of Christmas my true love gave to me five gold rings; four calling birds, three French hens, two turtle doves and a partridge in a pear tree. On the sixth day of Christmas my true love gave to me six geese a-laying, five gold rings; four calling birds, three French hens, two turtle doves and a partridge in a pear tree. On the seventh day of Christmas my true love gave to me seven swans a-swimming, six geese a-laying, five gold rings; four calling birds, three French hens, two turtle doves and a partridge in a pear tree. On the eighth day of Christmas my true love gave to me eight maids a-milking, seven swans a-swimming, six geese a-laying, five gold rings; four calling birds, three French hens, two turtle doves and a partridge in a pear tree. On the ninth day of Christmas my true love gave to me nine ladies dancing, eight maids a-milking, seven swans a -swimming, six geese a-laying, five gold rings; four calling birds, three French hens, two turtle doves and a partridge in a pear tree. On the tenth day of Christmas my true love gave to me ten lords a-lea ping, nine ladies dancing, eight maids a-milking, seven swans a-swimming, six geese a-laying, five gold rings; four calling birds, three French hens, two turtle doves and a partridge in a pear tree. On the eleventh day of Christmas my true love gave to me eleven pipers piping, ten lords a-lea ping, nine ladies dancing, eight maids a-milking, seven swans a-swimming, six geese a-laying, five gold rings; four calling birds, three French hens, two turtle doves and a partridge in a pear tree. On the twelfth day of Christmas my true love gave to me twelve drummers drumming, eleven pipers piping, ten lords a-lea ping, nine ladies dancing, eight maids a-milking, seven swans a-swimming, six geese a-laying, five gold rings; four calling birds, three French hens, two turtle doves and a partridge in a pear tree. 31

Výstup tohoto programu (česky) Na první den Vánoc mi moje pravá láska dala koroptev v hrušce (Ježíš Kristus). Na druhý den Vánoc mi moje pravá láska dala dvě hrdličky (Starý a Nový zákon) a koroptev v hrušce. Na třetí den Vánoc mi moje pravá láska dala tři francouzské slepice (víra, naděje, láska), dvě hrdličky a koroptev v hrušce. Na čtvrtý den Vánoc mi moje pravá láska dala čtyři volající ptáky (evangelisté), tři francouzské slepice, dvě hrdličky a koroptev v hrušce. Na pátý den Vánoc mi moje pravá láska dala pět zlatých prstenů (5 knih Mojžíšových), čtyři volající ptáky, tři francouzské slepice, dvě hrdličky a koroptev v hrušce. Šestý den Vánoc mi má pravá láska dala šest snášejících hus (šest dní stvoření světa), pět zlatých kroužků, čtyři volající ptáky, tři francouzské slepice, dvě hrdličky a koroptev v hrušce. Sedmý den Vánoc mi moje pravá láska dala sedm plovoucích labutí (sedm darů Ducha svatého), šest snášejících hus, pět zlatých prstenů, čtyři volající ptáky, tři francouzské slepice, dvě hrdličky a koroptev v hrušce. Osmého dne Vánoc mi moje pravá láska dala osm dojících služek (osm blahoslavenství), sedm plovoucích labutí, šest snášejících hus, pět zlatých prstenů, čtyři volající ptáky, tři francouzské slepice, dvě hrdličky a koroptev v hrušce. V devátý den Vánoc mi moje pravá láska dala devět tančících dam (ovoce Ducha svatého), osm dojících služek, sedm plovoucích labutí, šest snášejících hus, pět zlatých kroužků, čtyři volající ptáky, tři francouzské slepice, dvě hrdličky a koroptev v hrušce. Desátý den Vánoc mi má pravá láska dala deset skákajících pánů (Desatero přikázání), devět tančících dam, osm dojících služek, sedm plovoucích labutí, šest snášejících hus, pět zlatých kroužků, čtyři volající ptáky, tři francouzské slepice, dvě hrdličky a koroptev v hrušce. Jedenáctého dne Vánoc mi moje pravá láska dala jedenáct dudajících dudáků (jedenáct věrných apoštolů), deset skákajících pánů, devět tančících dam, osm dojících služek, sedm plovoucích labutí, šest snášejících hus, pět zlatých kroužků, čtyři volající ptáky, tři francouzské slepice, dvě hrdličky a koroptev v hrušce. Na dvanáctý den Vánoc mi moje pravá láska dala dvanáct bubnujících bubeníků (dvanáct bodů víry apoštolů), jedenáct dudajících dudáků, deset skákajících pánů, devět tančících dam, osm dojících služek, sedm plovoucích labutí, šest snášejících hus, pět zlaté prsteny, čtyři volající ptáky, tři francouzské slepice, dvě hrdličky a koroptev v hrušce. 32

Hlavičkové soubory hello.h #ifndef SAY_HELLO_H #define SAY_HELLO_H void sayhello(); #endif hello.cpp #include "hello.h" #include <iostream> void sayhello() { std::cout << "Hello\n"; } world.h #pragma once void sayworld(); world.cpp #include "world.h" #include <iostream> void sayworld() { std::cout << "World\n"; } #include "hello.h" #include "world.h" int main() { sayhello(); sayworld(); } 33

Preprocesor Povinná součást prostředí C a C++ Provádí textové úpravy před vlastním překladem Řídí se příkazy pro preprocesor direktivami Formát direktivy: #direktiva parametry Příklady direktiv: Vložení textu #include <soubor> #include "soubor" Definice makra #define jméno text #define jméno (parametry) text Podmíněný překlad, parametry překladu (později) 34

Fáze překladu EDITOR.h Hlavičkové soubory.c.cpp PREPROCESOR.lib Knihovní moduly Zdrojový text Přemístitelný modul PŘEKLADAČ.obj SPOJOVACÍ PROGRAM Spustitelný program.exe 35

Výpočetní problém Specifikace výpočetního problému má dvě části: definici vstupu (vstupních dat) a definici výstupu (výstupních dat). Instance výpočetního problému nějaká konkrétní přípustná vstupní data. K jedné instanci problému existovat několik správných výstupů (obecně se jedná o výpočet, představující relaci). Příklad: problém řazení čísel (Sorting Problem for Numbers). Vstup: Posloupnost n čísel In = a 1,,a n. Výstup: Taková permutace Out = a 1,,a n stejných čísel z In, pro kterou platí, že: a 1 a n. Instance problému řazení je např. zadání: seřaďte vzestupně posloupnost In = 75, 11, 34, 176, 59, 6, 54. Správným výstupem řazení je pak posloupnost Out = 6, 11, 34, 54, 59, 75, 176. Pozn.: Pro tento vstup je výstup určen jednoznačně, ale neplatí to pro každý 36

Výpočetní problém příklad Úloha: najděte největšího společného dělitele (NSD) dvou přirozených čísel (víme, co je největší společný dělitel dvou přirozených čísel?) Řešení: Popišme postup tak, aby byl použitelný pro dvě libovolná přirozená čísla: označme zadaná čísla x a y a menší z nich d není-li d společným dělitelem x a y, pak d zmenšíme o 1, test opakujeme a skončíme, až d bude společným dělitelem x a y Poznámka: Význam symbolů x, y a d použitých v algoritmu: jsou to proměnné (paměťová místa), ve kterých je uložena nějaká hodnota, která se může v průběhu výpočtu měnit 37

Algoritmus pro největšího spol. dělitele Úloha: najděte největšího společného dělitele dvou přirozených čísel Přesnější popis: Vstup: přirozená čísla x a y Výstup: NSD(x,y) Postup: 1. Je-li x<y, pak d má hodnotu x, jinak d má hodnotu y 2. Pokud je d dělitelem x, a zároveň je d dělitelem y, jdi na krok 5 3. Zmenši d o 1 4. Jdi na krok 2 5. Výsledkem je hodnota d Sestavili jsme algoritmus pro výpočet největšího společného dělitele dvou přirozených čísel. 38

Zápis algoritmu NSD v C++ #include <iostream> // pro std::cin a std::cout #include <algorithm> // pro std::min int deli(int d, int x) { } return x % d == 0; int main() { int x, y; std::cout << "Zadej dve cisla: "; std::cin >> x >> y; int d = std::min(x, y); while (!(deli(d, x) && deli(d, y))) { d -= 1; }; std::cout << "NSD(" << x << "," << y << ") = " << d << "\n"; } 39

Různé styly řešení problémů Zápis programu realizuje určitou funkci či algoritmus, které představují řešení určitého problému. K řešení problému můžeme dospět různými způsoby styly. Dva základní styly, kterými se budeme zabývat, jsou strukturovaný styl a objektově-orientovaný styl. Každý z nich se hodí na řešení trochu jiných problémů. Strukturovaný styl se hodí pro řešení procesních problémů, kdy řešení skládáme z posloupností jednotlivých kroků. Objektově-orientovaný styl se hodí spíše pro řešení různých informačních, či návrhových systémů, které uvažujeme jako síť komunikujících objektů. 40

Rozdíly mezi Javou a C++ Ačkoliv syntaxe obou jazyků je velmi podobná, chování se často liší. Některé z rozdílů jsou: Typový systém Správa prostředků Chování při inicializaci Nedefinované chování Generické typy 41

Typový systém C++ nerozlišuje mezi primitivními typy a objekty. Například, při předávání argumentů do funkce: public void foo(int count, Bar b) { count = 3; b.set(4); } void foo(int count, Bar b) { count = 3; b.set(4); } Java C++ 42

Správa prostředků V obou jazycích jde použít operátor new. C++ ale očekává, že je poté zavolán operátor delete. public void foo() { MyObject obj = new MyObject(); obj.dostuff(); } void foo() { MyObject* obj = new MyObject(); obj->dostuff(); } Java C++ 43

Správa prostředků V obou jazycích jde použít operátor new. C++ ale očekává, že je poté zavolán operátor delete. public void foo() { MyObject obj = new MyObject(); obj.dostuff(); } void foo() { MyObject* obj = new MyObject(); obj->dostuff(); // nebyl zavolán delete: ztráta paměti } Java C++ 44

Správa prostředků V obou jazycích jde použít operátor new. C++ ale očekává, že je poté zavolán operátor delete. public void foo() { MyObject obj = new MyObject(); obj.dostuff(); } void foo() { MyObject* obj = new MyObject(); obj->dostuff(); delete obj; } Java C++ 45

Správa prostředků V obou jazycích jde použít operátor new. C++ ale očekává, že je poté zavolán operátor delete. public void foo() { MyObject obj = new MyObject(); obj.dostuff(); } void foo() { MyObject obj; obj.dostuff(); } Java C++ 46

Správa prostředků V obou jazycích jde použít operátor new. C++ ale očekává, že je poté zavolán operátor delete. public void foo() { MyObject obj = new MyObject(); obj.dostuff(); } void foo() { MyObject obj; obj.dostuff(); } Lepší Java C++ 47

Správa prostředků Narozdíl od Javy, C++ nemá garbage collector, tj. neposkytuje automatickou správu prostředků. Výhodou pro C++ je, že prostředky jsou spravovány deterministicky: buďto je paměť uvolněna v daný okamžik v kódu, nebo nikdy. To umožňuje používat C++ v hard real-time aplikacích. 48

Chování při inicializaci Java zaručuje, že pokud vytvoříme proměnnou bez rovnítka =, proměnná bude mít danou hodnotu. int i; // hodnota i je 0 Bar b; // reference b je null To v C++ neplatí. int i; Bar* b; // hodnota i je nedefinovaná // ukazatel b je nedefinovaný Proto je dobré vždy určit hodnotu proměnné: int i = 0; // hodnota i je 0 Bar* b = nullptr; // ukazatel b je nullptr 49

Nedefinované chování C++ standard říká, že některé situace způsobují tzv. nedefinované chování programu. Například pokud čteme z neinicializované proměnné, náš program má nedefinované chování: int i; // i je neinicializovaná proměnná int j = i + 1; // způsobí nedefinované chování Nedefinované chování je zakázáno. Kompilátor předpokládá, že program nedefinované chování nemá. To občas vede ke zvláštním situacím... Pokud má program nedefinované chování, může se stát cokoliv. 50

Generické typy V Javě je možné tvořit generické typy, ale dosadit lze pouze objekty. ArrayList<int> list = new ArrayList<>(); // Chyba ArrayList<Integer> list = new ArrayList<>(); // OK V C++ lze dosadit libovolný typ. std::vector<int> list; // OK 51

Použité obrázky Mars Rover http://marsprogram.jpl.nasa.gov/msl/multimedia/images/?imageid=3710 Unreal Engine 4 http://cdn.wccftech.com/wp-content/uploads/2015/03/unreal-engine-4-quixel%e2%80%99s- Jungle-Environment-2.jpg CERN http://home.cern/about/experiments/cms Burza v New Yorku https://en.wikipedia.org/wiki/stock_exchange Robot ROS http://wiki.ros.org/robots/erle-rover Photoshop http://www.fullypcgames.net/2013/10/adobe-photoshop-cs6.html Robot NIFTI https://cw.felk.cvut.cz/w/_media/misc/projects/nifti/sw/adaptive_traversability/robot_obs tacle_intro.jpg Zdravotnická zařízení http://getingegroup.episerverhotell.net/sv/press/bildgalleri/koncern-och-affarsomraden/ 52

Konec 53