Budapest University of Technology and Economics, Faculty of Electrical Engineering and Informatics

    Belépés
    címtáras azonosítással

    vissza a tantárgylistához   nyomtatható verzió    

    C11 és C++11 programozás

    A tantárgy angol neve: C11 and C++11 Programming

    Adatlap utolsó módosítása: 2017. június 21.

    Budapesti Műszaki és Gazdaságtudományi Egyetem
    Villamosmérnöki és Informatikai Kar
    Mérnök informatikus szak
    Tantárgykód Szemeszter Követelmények Kredit Tantárgyfélév
    VIEEAV01   2/0/2/v 4  
    3. A tantárgyfelelős személy és tanszék Dr. Czirkos Zoltán, Elektronikus Eszközök Tanszéke
    4. A tantárgy előadója

    Név:

    Beosztás:

    Tanszék, Int.:

    Dr. Czirkos Zoltán

    egyetemi docens

    Elektronikus Eszközök Tanszéke

    5. A tantárgy az alábbi témakörök ismeretére épít

    Programozási gyakorlat, C és C++ programozási nyelv alapvető ismerete.

    6. Előtanulmányi rend
    Ajánlott:

    Kötelező:

    Programozás alapjai 2. (VIIIA114, VIAUA116, VIAUAA00, VIAUAA01, VIIIAA00, VIIIAA03 valamelyike).

    7. A tantárgy célkitűzése

    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.

    8. A tantárgy részletes tematikája

    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.

    9. A tantárgy oktatásának módja (előadás, gyakorlat, laboratórium)

    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.

    10. Követelmények

    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.

    11. Pótlási lehetőségek

    ·        A jelenlét nem pótolható.

    ·        A szorgalmi feladatok határidő után nem pótolhatóak.

    ·        A szorgalmi időszakban elkészítendő házi feladatok a pótlási hét végéig pótolhatóak. Pótlás esetén a szabályzatban meghatározott különeljárási díj fizetendő. Az elfogadott házi feladatok a pótlási hét végéig javítási céllal is leadhatóak. Ebben az esetben különeljárási díjat nem kell fizetni.

    ·        A sikertelen vizsgák a TVSZ-ben meghatározott módon pótolhatóak.

    12. Konzultációs lehetőségek

    Az előadóval történt egyeztetést követően folyamatos.

    13. Jegyzet, tankönyv, felhasználható irodalom

    ·         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

    14. A tantárgy elvégzéséhez átlagosan szükséges tanulmányi munka

    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

    0

    Házi feladat elkészítése

    12

    Kijelölt írásos tananyag elsajátítása

    0

    Vizsgafelkészülés

    32

    Összesen

    120

    15. A tantárgy tematikáját kidolgozta

    Név:

    Beosztás:

    Tanszék, Int.:

    Dr. Czirkos Zoltán

    egyetemi docens

    Elektronikus Eszközök Tanszéke