Programování v C++

NPRG041

2025/2026

David Bednárek

Katedra softwarového inženýrství

C++ je v nějakých ohledech tak bizarní jazyk, že si říkám, že musí být mimozemského původu. [anketa 2021/22]

Varování

Předmět předpokládá u všech účastníků zkušenosti s programováním, porozumění objektově-orientovanému programování a základní znalost jazyka C (nebo C++) a C# nebo Java. Pokud jste v programování začátečník, nezapisujte se. Pokud máte zkušenosti pouze s jazyky jako python, PHP, JavaScript, Pascal nebo FORTRAN, budete mít problém s porozuměním některým částem přednášky.

Pro pravidelné studenty programu Informatika jsou tyto předpoklady zajištěny prerekvizitami předmětu.

Komunikace

Pro komunikaci s vyučujícími používejte přednostně Mattermost. (Vaše emaily bývají často považovány za spam.)

Pro první přihlášení budete potřebovat invite-link, který najdete u rozvrhového lístku přednášky nebo na Nástěnce předmětu v SISu. (Tato pozvánka platí pro team 2526 pokrývající několik předmětů vyučovaných v ak. roce 2025/26.) Při registraci si zvolte jméno odpovídající tomu, pod kterým jste vedeni v SISu.

Tohoto předmětu se týkají kanály nprg041-cpp-[cvicici] pro cvičení daného vyučujícího a nprg041-cpp-repetenti pro repetenty. Všechny tyto kanály slouží pro komunikaci mezi vyučujícími a studenty i k diskusím mezi studenty týkajícím se předmětu. Pro neveřejnou komunikaci použijte direct messages.

Cvičení

Skupiny a pravidla pro cvičení a zápočty

Pravidla pro repetenty a studenty s rozloženým ročníkem

Zápočet

Během semestru bude probíhat průběžná kontrola podle pokynů cvičícího, zejména ve formě domácích úkolů. Úspěšné a včasné plnění bude hodnoceno body, maximálně lze získat 30 bodů.

Podmínkou udělení zápočtu je získání alespoň 20 bodů udělovaných za práci během semestru a úspěšné odevzdání individuálního zápočtového programu. Práce na zápočtovém programu bude kontrolována v několika termínech podle pokynů cvičícího, typicky návrh tématu, specifikace, technologické demo a finální verze.

Opravné termíny zápočtu vzhledem ke způsobu hodnocení nejsou možné, cvičící však může v odůvodněných případech prodloužit termíny odevzdání.

Každý student musí pracovat samostatně.

Zkouška

K připuštění ke zkoušce je nutné získat alespoň 20 bodů udělovaných za práci během semestru.

Obsahem zkoušky je vytvoření a odladění kódu v C++ splňujícího zadané rozhraní a funkcionalitu, a to v časovém limitu 3,5 hodiny. Každý student musí pracovat samostatně. U zkoušky bude hodnocena funkčnost i kvalita kódu a bude zohledněn i objem a charakter podpory AI, kterou student při zkoušce použil. Maximálně lze u zkoušky získat 60 bodů.

Výsledná známka z předmětu je určena na základě součtu bodů získaných během semestru a bodů získaných u zkoušky takto:

  • 60-69 bodů - dobře
  • 70-79 bodů - velmi dobře
  • 80-90 bodů - výborně

U zkoušky jsou povoleny dva opravné termíny.

Ve zkouškovém období letního semestru bude vypsán nejméně jeden zkouškový termín. Podmínkou připuštění k letním termínům bude udělení zápočtu (tj. úspěšné odevzdání zápočtového programu a 20 bodů z domácích úkolů). Letní termíny budou mít dostatečnou kapacitu pro všechny, kdo tuto podmínku splní.

Zápočtové testy i zkoušky se konají v počítačové laboratoři (N8/11 nebo S[UW][12]). Před zkouškou se ujistěte, že míříte do správné budovy, odpovídající termínu, na který jste se zapsali.

V zájmu zajištění stejných podmínek musejí studenti používat pouze počítače instalované v laboratořích, v režimu Windows nebo Linux. Použití notebooků (nebo jiných výpočetních prostředků, které nejsou součástí laboratoře) během zápočtového/zkouškového testu není povoleno. Studenti nesmějí používat jiné zdroje než překladače, debuggery, editory a IDE instalované v laboratoři a referenční manuály k jazyku na stránkách cppreference.com. Před zkouškou se ujistěte, že umíte pracovat s prostředím Windows nebo Linux v podobě, která je instalována na počítačích v laboratořích, především, že umíte spustit překladač a debugger a dokážete s ním pracovat.

Po dobu zkoušky bude v laboratořích výrazně omezen přístup k internetu, což může mít negativní vliv na funkčnost některých nástrojů v laboratoři instalovaných.

Doporučeným vývojovým prostředím je VS Code (pro Windows i Linux). Toto prostředí je jediné, ve kterém budou (omezeně) dostupné nástroje umělé inteligence. Návod ke konfiguraci VS Code je zde, včetně nastavení přístupu k AI. Tento návod můžete aplikovat na vlastních počítačích nebo v laboratořích. Při zkouškách bude toto prostředí přednastaveno.

Použití prostředků AI při zkoušce je dovoleno pouze v předepsaném nastavení. Veškerá komunikace s AI bude zaznamenávána a příliš intenzivní využití AI bude mít negativní dopad na hodnocení zkoušky.

Ve Windows režimu bude funkční i Microsoft Visual Studio, avšak bez AI nástrojů.

Průběh přednášky

Plán je založen na loňském průběhu a bude průběžně aktualizován.

Varování: Videa z éry pandemie jsou zastaralá a nepokrývají všechna aktuálně požadovaná témata.

Datum Slajdy Témata Video
2020/21
Video
2021/22
29.9.2025 1..15 Výhody a nevýhody C/C++. Kompilace, hlavičkové soubory, dělení do modulů. 09-29
6.10.2025 16..26
1..11 Hello, world. Předávání hodnotou a odkazem. 10-06
13.10.2025 12..14 10-19
1..12 Hodnoty, ukazatele, reference. 10-13
10-26
20.10.2025 1..11 L-value a R-value reference. Copy/move. Předávání parametrů a vracení hodnotou a odkazem, fyzická a logická konstantnost. 10-20
11-02
27.10.2025 12..18
3.11.2025 19..30 10-27 11-09
1..2 Copy/move-elision, lvalue/rvalue, copy/move metody. Rule-of-Five.
10.11.2025 3..19 11-16
24.11.2025 20..21
1..15 Dynamic allocation, smart pointers, observers. Konvence používání ukazatelů a referencí. Arrays vs. vectors, smart pointers vs. containers. 11-03
11-23
1.12.2025 1..15 Kontejnery, iterátory, range-for-loop. Algoritmy. 11-10
8.12.2025 16..18
1..13 Funktory, lambda, std::function. 11-24
12-14
15.12.2025 1..18 Šablony, forwarding references, variadické šablony. 12-01
1..14 Traits, policy classes, functors, tags.
5.1.2026 1..19 Class vs. namespace. Dědičnost. 12-15
1..16 Výjimky.
Doplňkové slajdy nepokryté přednáškami
1..4 std::variant. 12-08 12-21
1..12 Visitor. 12-22