Belépés címtáras azonosítással
magyar nyelvű adatlap
C11 és C++11 programozás
A tantárgy angol neve: C11 and C++11 Programming
Adatlap utolsó módosítása: 2022. január 25.
Név:
Beosztás:
Tanszék, Int.:
Dr. Pohl László
egyetemi docens
Elektronikus Eszközök Tanszéke
Programozási gyakorlat, C és C++ programozási nyelv alapvető ismerete.
A tárgy elsődleges célkitűzése, hogy a C és C++ nyelv iránt mélyebben érdeklődő hallgatók számára a két nyelv használatával kapcsolatban az alapképzésen túlmutató ismereteket adjon. A tárgyban nagy hangsúlyt kapnak a modern C++ nyelv különböző változataiban (2011-es és 2014-es, 2017-es) megjelent új nyelvi elemek, és azok alkalmazási lehetőségei.
A tárgyat teljesítő hallgató:
(K3) képes lesz alkalmazni a C++ nyelv tárgyban bemutatott, új nyelvi elemeit,
(K3) a modern C++ nyelv szemléletét követve fogja tudni felépíteni programját,
(K2) érteni fogja a nyelvi eszközök tervezése mögötti megfontolásokat,
(K2) részletes ismeretei lesznek a C++ tárkezeléséről,
(K1) ismerni fogja a nyelv főbb fejlődési irányait.
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.
Előadás, melynek keretében gyakorlati ismereteket is nyújtó példákat is ismertetünk, esettanulmány jelleggel, esetenként on-line számítógépi demonstrációval. Az egyes előadásokhoz géptermi laborgyakorlat is tartozik, amely a bemutatott programozási elveket, nyelvi elemeket hivatott még több példán keresztül áttekinteni és gyakoroltatni.
Az érdeklődők számára a tárgyon tanultak alkalmazását bemutató, illetve a tárgy tananyagán túlmutató szakmai írásokat teszünk közzé a tárgy honlapján. Ezek egyéni elmélyülésre adnak lehetőséget. Feldolgozásukhoz igény szerint konzultációk keretében segítséget nyújtunk.
A tárgyban kiadott házi feladat és a vizsgadolgozat a megszerzett ismeretek alkalmazására fókuszálnak.
a. A szorgalmi időszakban:
Jelenlét: az előadásokon és a laborgyakorlatokon legfeljebb 30% hiányzás megengedett.
Házi feladatok: a félév közben kettő házi feladatot adunk ki, amelyeket a szorgalmi időszakban kell elkészíteni.
Szorgalmi feladatok: a félév közben rendszeresen szorgalmi feladatokat adunk ki, amelyek megoldása nem kötelező.
b. A vizsgaidőszakban:
A vizsgáztatás módja: írásbeli vizsga.
A vizsgajegyet úgy alakítjuk ki, hogy abban a vizsgán elért eredmény 80%-ban, a házi feladatokból szerzett pontszámok 20%-ban számítanak bele. Sikertelen vizsgadolgozat esetén a jegy is elégtelen.
c. Megajánlott jegy:
A szorgalmi időszakban leadott és elfogadott házi feladatokkal, továbbá a szorgalmi feladatokkal elért jó eredménnyel megajánlott jegy szerezhető, amely mentesít a vizsga követelménye alól.
Az előadóval történt egyeztetést követően folyamatos.
B. Stroustrup: A C++ programozási nyelv (I-II)
M. Gregorie, N. A. Solter, S. J. Kleper: Professional C++, 2nd edition.
Scott Meyers: Overview of The New C++ (C++11)
Scott Meyers: Hatékony C++ (Effective C++)
Andrei Alexandrescu, Herb Sutter: C++ kódolási szabályok
Kontakt óra
56
Félévközi készülés előadásra
6
Félévközi készülés gyakorlatra
0
Félévközi készülés laborra
14
Felkészülés zárthelyire
Házi feladat elkészítése
12
Kijelölt írásos tananyag elsajátítása
Vizsgafelkészülés
32
Összesen
120
Dr. Czirkos Zoltán