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

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

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

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

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 9

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

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

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

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

Vector datový kontejner v C++.

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

Ukazatele, dynamická alokace

Více o konstruktorech a destruktorech

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

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

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

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++

Mělká a hluboká kopie

Programování v jazyce C a C++

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

map, multimap - Asociativní pole v C++.

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

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

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

Šablony, kontejnery a iterátory

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

PB přednáška (21. září 2015)

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

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

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

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

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

Funkční objekty v C++.

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

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

Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++

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

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

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

Šablony, kontejnery a iterátory

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

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

C++ objektově orientovaná nadstavba programovacího jazyka C

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

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

Stručný obsah První týden Druhý týden 211 Třetí týden 451 Rejstřík 787

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

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

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

OBJEKTOVÉ PROGRAMOVÁNÍ V C++ V PŘÍKLADECH 8 Proudová knihovna 8.1 Hierarchie proudů Standardně zavedené proudy

Konec a tak. PB173 Programování v C++11. Vladimír Štill, Jiří Weiser. Fakulta Informatiky, Masarykova Univerzita. 15.

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

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

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

Cvičení z programování v C++ ZS 2016/2017 Přemysl Čech

konstruktory a destruktory (o)

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

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

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

Standardní algoritmy vyhledávací.

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

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

Přetěžování operátorů, dynamika objektů 2

Předměty. Algoritmizace a programování Seminář z programování. Verze pro akademický rok 2012/2013. Verze pro akademický rok 2012/2013

Množina čísel int stl-set-int.cpp

Jazyk C++ I. Šablony

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

Iterátory v C++. int pole[20]; for (int *temp = pole, temp!= &pole[20]; temp++) { *temp = 0;

Programování v C++ Úplnej úvod. Peta (maj@arcig.cz, SPR AG )

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

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

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

Programování v C++ VI

C++ přetěžování funkcí a operátorů. Jan Hnilica Počítačové modelování 19

Standardní algoritmy v C++.

PB161 programování v C++ Výjimky Bezpečné programování

Dědění, polymorfismus

Pokročilé programování v jazyce C pro chemiky (C3220) Vstup a výstup v C++

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Objektově orientované programování

Abstraktní třídy, polymorfní struktury

PB161 Programování v C++ Proudy pro standardní zařízení Souborové proudy Paměťové proudy Manipulátory

Programování v jazyce C a C++

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

Jazyk C++ II. STL knihovna kontejnery část 1

IB111 Úvod do programování skrze Python Přednáška 7

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.

Jazyk C# (seminář 6)

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

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

Množina v C++ (set, multiset).

Šablony funkcí a tříd (Templates) Genericita

Ukazka knihy z internetoveho knihkupectvi

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

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

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

Programování II. Návrh programu I 2018/19

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE STRUKTURA PŘEKLADAČE

Transkript:

PB161 Programování v jazyce C++ Přednáška 1 Organizace Úvod do C++ Nikola Beneš 18. září 2018 PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 1 / 36

Cíle předmětu 1. ukázat možnosti jazyka C++ moderní C++ podle standardu C++14 2. vysvětlit základy OOP jak se realizují v C++ 3. podpořit praktické programátorské schopnosti intenzivním programováním PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 2 / 36

Organizace předmětu http://www.fi.muni.cz/pb161 PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 3 / 36

Organizace předmětu Přednášky v 7. týdnu vnitrosemestrální test (20 bodů) zvaná přednáška ke konci semestru Demonstrační cvičení Cvičení programovací ukázky, časté chyby, řešení miniúkolů program záleží z části na studentech krátké úvodní shrnutí probíraného tématu týdenní miniúkoly (celkem 10 po 3 bodech) programování s možností okamžité pomoci poslední týden zápočtový příklad PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 4 / 36

Úkoly Týdenní miniúkoly (10 po 3 bodech) zadání před přednáškou, odevzdání další týden v pátek smysl: procvičit látku probranou na přednášce odevzdávání pomocí fakultního GitLabu, 3 pokusy část testů k dispozici předem Domácí úkoly (4 + 1 navíc) max. 15 bodů za úkol až 7 bodů udělovaných Kontrem (automatické testy) až 3 body udělované člověkem (hodnocení kvality kódu) až 3 body za počet odevzdání až 2 body za včasné odevzdání odevzdávání použitím fakultního GitLabu, šest pokusů pro odevzdání (poslední dva s penalizací) detaily na http://www.fi.muni.cz/pb161 (novinky červeně) PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 5 / 36

Bodování tvrdé a měkké body měkké se nepočítají do limitu pro zápočet a zkoušku domácí úkoly 5 15 = 75 miniúkoly 10 3 = 30 vnitrosemestrální test 20 celkem (tvrdé body) 125 zkouškový test: 80 bodů měkké body: bonusové části domácích úkolů zvláště pěkná řešení domácích úkolů jiné (upozornění na chyby, aktivita) PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 6 / 36

Hodnocení Zápočet Zkouška >= 65 tvrdých bodů, 4 nenulové domácí úkoly, zápočtový příklad stačí 3 nenulové domácí úkoly, pokud máte alespoň 70 % bodů z miniúkolů >= 95 tvrdých bodů, zápočet známka podle součtu tvrdých a měkkých bodů: >= 175 bodů A >= 155 bodů B >= 135 bodů C >= 115 bodů D >= 95 bodů E PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 7 / 36

Učební materiály http://cppreference.com ukázka: online dokumentace PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 8 / 36

Zpětná vazba, dotazy, komentáře předmětová anketa v ISu (až na konci semestru) dotazníky (obtížnost úloh apod.) osobně, e-mailem anonymní vzkazy: https://web.speakup.info https://kahoot.it PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 9 / 36

Doporučované vývojové nástroje cmake (verze alespoň 3) v současnosti asi nejpopulárnější nástroj pro automatizaci překladu multiplatformní clang (verze alespoň 5) Catch2 populární multiplatformní překladač součást projektu LLVM jednoduchá knihovna pro psaní unit testů PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 10 / 36

Plán semestru Blok 1: Základní programování v C++ základy vstupu a výstupu, řetězce, dynamická pole základy tříd, reference, const standardní knihovna, kontejnery, algoritmy, iterátory Blok 2: Správa paměti a zdrojů, I/O konstruktory a destruktory, kopírování práce s pamětí a zdroji, princip RAII přetěžování operátorů, vstup a výstup podrobněji Blok 3: OOP v C++ principy OOP, časná vs. pozdní vazba, virtuální metody dědičnost, návrhové vzory, static výjimky, jmenné prostory Blok 4: Šablony, ukázky pokročilejšího C++ PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 11 / 36

Programovací jazyk C++ PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 12 / 36

Historie a vývoj 1978 C K&R PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 13 / 36

Historie a vývoj C with Classes B. Stroustrup 1979 1978 C K&R PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 13 / 36

Historie a vývoj C with Classes B. Stroustrup 1979 C++ 1983 1978 C K&R PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 13 / 36

Historie a vývoj C with Classes B. Stroustrup 1979 C++ 1983 C++98 1998 1978 C K&R PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 13 / 36

Historie a vývoj C with Classes B. Stroustrup 1979 C++ 1983 C++98 1998 C++03 2003 1978 C K&R PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 13 / 36

Historie a vývoj C with Classes B. Stroustrup 1979 C++ 1983 C++98 1998 C++03 2003 C++11 2011 1978 C K&R PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 13 / 36

Historie a vývoj C with Classes B. Stroustrup 1979 C++ 1983 C++98 1998 C++03 2003 C++11 2011 C++14 2014 1978 C K&R PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 13 / 36

Historie a vývoj C with Classes B. Stroustrup 1979 C++ 1983 C++98 1998 C++03 2003 C++11 2011 C++14 2014 C++17 2017 1978 C K&R Budoucnost: C++2x Nestandardizovaná rozšíření PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 13 / 36

Historie a vývoj C with Classes B. Stroustrup 1979 C++ 1983 C++98 1998 C++03 2003 C++11 2011 C++14 2014 C++17 2017 1978 C K&R 1989 C89 1999 C99 2011 C11 Budoucnost: C++2x Nestandardizovaná rozšíření PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 13 / 36

Historie a vývoj C with Classes B. Stroustrup 1979 C++ 1983 C++98 1998 C++03 2003 C++11 2011 C++14 2014 C++17 2017 1978 C K&R 1989 C89 1999 C99 2011 C11 Budoucnost: C++2x Nestandardizovaná rozšíření PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 13 / 36

Charakteristika C++ imperativní, staticky typovaný jazyk objektově-orientovaný; hodnotová sémantika objektů s funkcionálními prvky (zejména od C++11) podporuje generické programování a metaprogramování (šablony) částečně zpětně kompatibilní s C rozsáhlá standardní knihovna C++11 přineslo významné změny k lepšímu malloc free new delete unique_ptr PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 14 / 36

Proč používat C++? široké rozšíření vysoká rychlost kódu univerzálnost rozsáhlé možnosti metaprogramování jiný pohled na sémantiku objektů ve srovnání s většinou v současnosti populárních jazyků RAII (deterministická správa zdrojů) vhodné pro větší projekty systémové aplikace rychlou grafiku embedded zařízení spíše nevhodné pro webové aplikace rychlé prototypy PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 15 / 36

Hello, world! // C++ #include <iostream> int main() { std::cout << "Hello, world!\n"; } // C #include <stdio.h> int main() { printf("hello, world!\n"); } lecture01_01.cpp PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 16 / 36

Hello, world! 2.0 // C++ #include <iostream> #include <string> int main() { std::cout << "What is your name? "; std::string name; std::cin >> name; std::cout << "Hello, " << name << "!\n"; } Jak bychom podobný program napsali v C? lecture01_02.cpp PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 17 / 36

Řetězce v C++ std::string hlavičkový soubor <string> sám si alokuje a dealokuje paměť indexování funguje jako v C std::string s = "Hello!"; s[0] = 'J'; std::cout << s; // Jello! lecture01_03.cpp PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 18 / 36

Řetězce v C++ std::string hlavičkový soubor <string> sám si alokuje a dealokuje paměť indexování funguje jako v C std::string s = "Hello!"; s[0] = 'J'; std::cout << s; // Jello! navíc se umí přiřazovat std::string s = "Hello!"; std::string t; t = s; co se stane, když teď provedeme t[0] = 'J'? lecture01_03.cpp PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 18 / 36

Řetězce v C++ (pokr.) std::string umí se řetězit pomocí operátoru + (a operátoru +=) std::string h = "Hello"; std::string w = "world"; std::string s = h + ", " + "!"; Pozor! tohle nebude fungovat: (proč?) std::string s = "James" + " " + "Bond"; lecture01_03.cpp PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 19 / 36

Řetězce v C++ (pokr.) std::string umí se řetězit pomocí operátoru + (a operátoru +=) std::string h = "Hello"; std::string w = "world"; std::string s = h + ", " + "!"; Pozor! tohle nebude fungovat: (proč?) std::string s = "James" + " " + "Bond"; umí toho ještě mnohem více: http://en.cppreference.com/w/cpp/string lecture01_03.cpp PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 19 / 36

Dynamická pole v C++ std::vector hlavičkový soubor <vector> dynamické (rozšiřitelné) pole std::vector<int> v; v.push_back(1); // vložení prvku za konec pole v.push_back(2); v.push_back(3); for (int i = 0; i < v.size(); ++i) { std::cout << v[i]; } for (int x : v) { // od C++11: range-for std::cout << x; } lecture01_04.cpp PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 20 / 36

Dynamická pole v C++ (pokr.) std::vector inicializace std::vector<int> v = {1, 2, 7, 17, 42}; // od C++11 std::vector<int> v{1, 2, 7, 17, 42}; // totéž std::vector<int> v(10); // 10 nul std::vector<int> v(10, 17); // 10 sedmnáctek pozor na rozdíl mezi () a {} více na http://en.cppreference.com/w/cpp/container/vector pozor na rozdíl mezi resize a reserve bonus: v C++17 si typ objektů uvnitř vektoru umí kompilátor v některých případech domyslet sám: std::vector v = {1, 2, 3, 4, 5}; lecture01_05.cpp PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 21 / 36

Hodnotová sémantika Objekty se chovají stejně jako primitivní typy přiřazení je vytvoření kopie předání do funkce je vytvoření kopie konec bloku znamená zánik objektu void f(int z) { z = 7; } int x = 3; int y = x; f(y); x = 5; // jaké jsou hodnoty x, y? std::string i std::vector se chovají stejně lecture01_06.cpp PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 22 / 36

Volání funkcí void f1(std::string s) { // s je kopie skutečného argumentu // změny s se navenek nijak neprojeví } void f2(std::string& s) { // s je reference na skutečný argument // změny s se navenek projeví } void f3(const std::string& s) { // s je reference na skutečný argument // je zakázáno s měnit } více si o referencích řekneme příště lecture01_07.cpp PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 23 / 36

Range-for funguje podobně jako volání funkcí na předchozím slajdu std::vector<std::string> names; //... for (std::string s : names) { // s je kopie položky vectoru } for (std::string& s : names) { // s se odkazuje na položku vectoru // můžeme jej měnit } for (const std::string& s : names) { // s se odkazuje na položku vectoru // nesmíme jej měnit } lecture01_07.cpp PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 24 / 36

Základy vstupu a výstupu <iostream> std::cout standardní výstup, objekt typu std::ostream výpis probíhá pomocí operátoru << přetížený operátor, automatická detekce typu std::cout << "Jmenuji se " << name << " a je mi " << age << " let.\n"; manipulátor std::endl konec řádku a vyprázdnění bufferu std::cout << "In a galaxy far, far away..." << std::endl; PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 25 / 36

Základy vstupu a výstupu (pokr.) std::cin standardní vstup, objekt typu std::istream vstup probíhá pomocí operátoru >> vstup je ukončen bílým znakem std::string s; std::cin >> s; // načte jen jedno slovo vstup celého řádku pomocí std::getline(std::cin, s) více o vstupu a výstupu později PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 26 / 36

Co znamená std::? Jmenné prostory umožňují lepší koexistenci různých knihoven více si o nich řekneme později Jmenný prostor standardní knihovny std všechny typy, objekty, funkce standardní knihovny začínají std:: Musíme všude psát std::? PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 27 / 36

Direktiva using namespace a deklarace using using std::cout; // odteď můžeme psát jen cout //... using namespace std; // odteď můžeme psát všechno bez std:: platnost končí koncem bloku pokud není uvnitř bloku, nekončí nikdy PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 28 / 36

Direktiva using namespace a deklarace using using std::cout; // odteď můžeme psát jen cout //... using namespace std; // odteď můžeme psát všechno bez std:: platnost končí koncem bloku pokud není uvnitř bloku, nekončí nikdy Doporučení a pravidla preferujte using std::něco; před using namespace std; (proč?) PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 28 / 36

Direktiva using namespace a deklarace using using std::cout; // odteď můžeme psát jen cout //... using namespace std; // odteď můžeme psát všechno bez std:: platnost končí koncem bloku pokud není uvnitř bloku, nekončí nikdy Doporučení a pravidla preferujte using std::něco; před using namespace std; (proč?) nikdy nepište using namespace std; nebo using std::něco do hlavičkového souboru, pokud to není uvnitř bloku (funkce) Proč? Co strašného se stane? PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 28 / 36

Testování PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 29 / 36

Testování Programy obsahují chyby je to tak Testování programů důležitá součást vývoje různé úrovně testování unit testing testování malých jednotek kódu Nástroje pro unit testing velká řada různých frameworků my používáme https://github.com/catchorg/catch2 jeden hlavičkový soubor, bez závislostí testy se dají dělit do sekcí, podpora Behaviour-Driven Development jedno makro pro různé druhy porovnání PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 30 / 36

Použití Catch2 Hlavní soubor by měl obsahovat jen toto: #define CATCH_CONFIG_MAIN #include "catch.hpp" Ostatní soubory s testy jednotlivé testy uvnitř bloků TEST_CASE TEST_CASE("A very nice test case") { // kód s asserty } TEST_CASE("Another very nice test case") { // kód s asserty } PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 31 / 36

Použití Catch2 sekce Dělení testů do sekcí bloky SECTION (dají se zanořovat) TEST_CASE("Some test") { // tato část se provede vždy SECTION("First section") { // tato část se provede při prvním průchodu } SECTION("Second section") { // tato část se provede při druhém a třetím průchodu SECTION("First subsection") { // tato část se provede při druhém průchodu } SECTION("Second subsection") { // tato část se provede při třetím průchodu } } } PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 32 / 36

Použití Catch2 (pokr.) Podmínky CHECK(condition); // musí být pravdivá CHECK_FALSE(condition); // nesmí být pravdivá REQUIRE(condition); // musí být pravdivá REQUIRE_FALSE(condition); // nesmí být pravdivá Catch2 umí rozumně zacházet s jednoduchými porovnáními typu x == y, x < y apod. REQUIRE zastaví test, pokud podmínka neplatí; CHECK pokračuje dál doporučení: preferujte CHECK; REQUIRE použijte tehdy, pokud další pokračování testu v případě nesplněné podmínky nedává smysl PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 33 / 36

Použití Catch2 (pokr.) Logování INFO(message) v případě, že v budoucnosti selže nějaký assert, zadaná zpráva se zobrazí zprávy jsou lokální na úrovni bloků uvnitř INFO možno řetězit výstupy pomocí << WARN zobrazí zprávu vždy FAIL zobrazí zprávu a neúspěšně ukončí test CAPTURE(var) totéž, co INFO("var := " << var) PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 34 / 36

Závěrečný kvíz https://kahoot.it PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 35 / 36

Závěrečný kvíz #include <iostream> #include <string> #include <vector> void f(std::vector<std::string> z) { z[0] = "Omikron"; } int main() { std::vector<std::string> x = {"Alpha", "Beta", "Gamma"}; std::vector<std::string> y = x; x[1] = "Delta"; f(y); for (std::string s : y) { std::cout << s; } std::cout << '\n'; } lecture01_08.cpp PB161 přednáška 1: organizace, úvod do C++ 18. září 2018 36 / 36