C11 and C++11 Programming
A tantárgyleírás hatályossága
| Subject name (Hungarian, English) |
C11 és C++11 programozás
C11 and C++11 Programming
|
||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Subject code | BMEVIEEAV01 | ||||||||||||
| Subject type | — | ||||||||||||
| Training Level | — | ||||||||||||
| Course types and hours (weekly/semester) |
|
||||||||||||
| Assessment type | vizsga | ||||||||||||
| Credits | 4 | ||||||||||||
| Subject coordinator |
DR. Pohl László
position: egyetemi docens
contact:
pohl.laszlo@vik.bme.hu
|
||||||||||||
| Responsible department |
Elektronikus Eszközök Tanszéke
|
||||||||||||
| Faculty | Villamosmérnöki és Informatikai Kar | ||||||||||||
| Subject website | — | ||||||||||||
| Primary curriculum type | — | ||||||||||||
| Direct prerequisites – Strong prerequisite | none | ||||||||||||
| Direct prerequisites – Weak prerequisite | none | ||||||||||||
| Direct prerequisites – Parallel prerequisite | none | ||||||||||||
| Direct prerequisites – Milestone prerequisite | none | ||||||||||||
| Direct prerequisites – Exclusion | none |
Objectives
1. hét: Az objektumorientált programozás ismétlő áttekintése. A C99 és C11 nyelv új nyelvi elemei. Összetett literálisok, változó méretű tömbök és tömb adattagok. Függvényparaméterrel megadott és változók értékeitől függő pointer típusok.
2. hét: OOP tervezési minták C++11 nyelvi specifikus megvalósítása. Az override és a final kulcsszavak. A virtuális konstruktor nyelvi fordulat, heterogén kollekció másolása és perzisztenciája, futásidejű típusinformációk.
3. hét: Adattag mutatók. A reflexió megvalósításának lehetőségei. Az öröklés megvalósításának technikai részletei C++11-ben. Az öröklés és a heterogén kollekciók megvalósításának lehetőségei a C nyelvben.
4. hét: Típusok és sablonok haladó használata. Függvénynevek túlterhelése, indexelő segédobjektumok, I/O manipulátorok megvalósítása. Automatikus konverziók, egyparaméterű konstruktorok és konverziós operátorok. Kifejezések kétértelműsége, az explicit kulcsszó használata konverziókra. A névvel rendelkező konstruktor, mint nyelvi fordulat. Felhasználó által definiált literálisok.
5. hét: A C++11 memóriamodelljének részletes tárgyalása. A verem és a dinamikus memóriakezelés, a láthatóság és az élettartam témakörének ismétlő áttekintése. A memóriakezelés problémái, a downward és az upward funarg probléma. Hatékonysági kérdések; a copy elision optimalizáció. Okos pointerek belső működése (referenciaszámlálás, intruzív, nonintruzív megvalósítások) és használata. A szabványos unique_ptr, shared_ptr, weak_ptr osztályok.
6. hét: Hatékony tároló osztályok. Destruktorok explicit hívása és a placement new. Az std::vector belső működése. Új konstruktor szintaktikák, inicializáló listák. A C++11 használhatóságot javító nyelvi újdonságai: range-based for loop (foreach), auto, decltype kulcsszavak. Globális begin és end iterátor-gyártófüggvények.
7. hét: A jobbérték referencia fogalma. Objektummásolás és mozgatás szemantikák. Az auto_ptr osztály kivezetésének okai. Mozgató konstruktorok, az std::move sablon használata. A mozgató konstruktorok írásának szabályai.
8. hét: A kivételbiztos kód fogalma, kódelemzés a kivételbiztosság szempontjából. A RAII elv és használata. Kivételbiztos tárolók, a „copy and swap” és „move and swap” technikák. Noexcept kulcsszó és mozgatás szemantika.
9. hét: Az std::function, std::bind és std::ref sablonok használata. Lambda függvények. Jelentésük, kapcsolatuk a funktorokkal. Closure-ök fogalma és használata. Paraméterek rögzítése érték és referencia szerint. Mutable lambda. Generikus lambda függvények.
10. hét: A sablon metaprogramozás eszközei. Típusinformációs osztályok használata. A SFINAE szabály és alkalmazásai. Fordítási idejű kiértékelés, metafüggvények implementálása. A C++17-es if constexpr nyelvi fordulat.
11. hét: Változó hosszúságú sablonparaméter-listák és rekurzív sablonok. Függvényargumentumok továbbítása, univerzális referencia, reference collapsing, std::forward, gyártófüggvények és helyben létrehozás.
12. hét: Többszálúság a C++11 nyelvben. Szálak, mutexek, atomi műveletek, async, future és promise sablonok. Parallel STL. Esettanulmány: korutinok megvalósítása.
13. hét: Nyelvi elemzők elmélete röviden, és C++ nyelvű megvalósításuk. Haladó operátorhasználat, absztrakt szintaxisfák építése.
14. hét: Kitekintés. A nyelv jövőbeli fejlesztési irányai. Sablon metaprogramozás haladó eszközei, a concept és a requires használata.
Learning outcomes
Ez a tantárgy a KKK rendeletben meghatározott, következő kompetenciák fejlesztését szolgálja:
Knowledge
No learning outcomes recorded.
Skills
No learning outcomes recorded.
Attitudes
No learning outcomes recorded.
Autonomy and responsibility
No learning outcomes recorded.
Oktatási módszertan
Tanulástámogató anyagok
Not provided.
Recommended preliminary knowledge for completing the subject
General rules
Assessment methods
In-term assessments
No detailed assessments provided.
Weight of in-term assessments
No weights provided.
Exam-period assessments
No detailed assessments provided.
Weight of exam elements
No weights provided.
Grade calculation
No grade thresholds provided.
Attendance requirements
No attendance requirements provided.
Rules for retake and resubmission
Not provided.
Short description
Not provided.
Detailed description
Not provided.
Recommended courses
Not provided.
Workload to complete the subject
No workload breakdown provided.
Validity of subject requirements
Curriculum placement
No curriculum placements recorded for this subject version.