|
Lecturer(s)
|
-
Úbl Martin, Ing.
-
Koutný Tomáš, doc. Ing. Ph.D.
|
|
Course content
|
1. Basic concepts of modern C++, coding standard, std::array, std::vector 2. Memory representation of data types, STL, iterators, RAII, smart pointers 3. Objects, virtual methods, const, constexpr and final, function and operator overloading 4. Lambda functions, exceptions, std:: algorithms, random number generators 5. Multiple inheritance, working with types, streams (files and other) 6. Copy and move semantics, templates 7. Variadic templates, dynamic vs. static polymorphism, CRTP 8. Threads in C++ and basic synchronization primitives, parallel algorithms 9. Concepts, coroutines, modules 10. Debugging the code 11. Program profiling, memory leaks 12. Compiling selected high-level constructs (e.g.; devirtualization), optimalization, clean abstraction 13. Selected support libraries and tools of C++ (Boost, Qt, CMake)
|
|
Learning activities and teaching methods
|
- Individual project (40)
- 38 hours per semester
- Contact hours
- 39 hours per semester
- Preparation for an examination (30-60)
- 30 hours per semester
|
| prerequisite |
|---|
| Knowledge |
|---|
| To know the C programming language and how to use it, and at least one object-oriented programming language. |
| To understand and be able to use theoretical informatics knowledge (e.g.; computational complexity) |
| To know the basic principles of CPU operation and division of address space (memory allocation, stack, heap) |
| Skills |
|---|
| To be able to analyze and decompose a given problem, propose algorithmic solution and implement it. |
| Competences |
|---|
| N/A |
| N/A |
| N/A |
| N/A |
| learning outcomes |
|---|
| Knowledge |
|---|
| To know basic and advanced C++ language features including the ones from modern standards. |
| To know the principles of modern compiled programming languages and their relation to effectivity and safety. |
| To know how C++ relates to other programming languages. |
| Skills |
|---|
| To be able to use C++ to implement small and medium-sized software projects with maximum utilization of language features to increase code safety and effectivity of a resulting program. |
| To know how to analyze and evaluate quality of own program using available tools. |
| To be able to decide, whether to use C++ programming language to solve given problem or not. |
| Competences |
|---|
| N/A |
| teaching methods |
|---|
| Knowledge |
|---|
| Lecture with visual aids |
| Lecture supplemented with a discussion |
| Practicum |
| Task-based study method |
| Collaborative instruction |
| Self-study of literature |
| Individual study |
| Discussion |
| Skills |
|---|
| Lecture |
| Lecture supplemented with a discussion |
| Practicum |
| Lecture with visual aids |
| Task-based study method |
| Collaborative instruction |
| Self-study of literature |
| Discussion |
| Competences |
|---|
| Self-study of literature |
| assessment methods |
|---|
| Knowledge |
|---|
| Practical exam |
| Skills demonstration during practicum |
| Continuous assessment |
| Skills |
|---|
| Practical exam |
| Skills demonstration during practicum |
| Continuous assessment |
| Competences |
|---|
| Continuous assessment |
|
Recommended literature
|
-
Meyers Scott. Effective Modern C++ 42 Specific Ways to Improve Your Use of C++11 and C++14. O'Reilly Media, 2015. ISBN 978-1491903995.
-
Stroustrup Bjarne. A Tour of C++ (C++ In-Depth). Addison Wesley, 2013.
|