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: 2016. április 27.

    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. (BMEVIIIA114 vagy BMEVIAUA116 vagy BMEVIIIAA00 vagy BMEVIAUAA00).

    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 nyelvek 2011-es  és 2014-es változataiban megjelent új nyelvi elemek, és azok alkalmazási lehetőségei.

    8. A tantárgy részletes tematikája 1. hét:     Az objektumorientált programozás ismétlő áttekintése. Az öröklés és a heterogén kollekciók megvalósításának lehetőségei a C nyelvben. Objektumok a Class-C és a GObject keretrendszerekben.
    2. hét:     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. Új kulcsszavak, az aliasing fogalma, optimalizációs lehetőségek.
    3. hét:     Az öröklés megvalósításának technikai részletei C++11-ben. Az override és a final speciális azonosító. A virtuális konstruktor nyelvi fordulat, heterogén kollekció másolása és perzisztenciája, futásidejű típusinformációk.
    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 (egyedi, közös, intruzív, nonintruzív) és használata. A szabványos auto_ptr, unique_ptr, shared_ptr, weak_ptr osztályok. A mozgatás szemantikája az auto_ptr kapcsán.
    6. hét:     A jobbérték referencia fogalma. Objektummásolás és mozgatás szemantikák. Mozgató konstruktorok, az std::move sablon használata. A mozgató konstruktorok írásának szabályai.
    7. hét:     Az „egyszerű adat” (POD, plain old data) fogalma és jelentése a C++11 szabványban. Ú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.
    8. 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.
    9. 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” C++11 nyelvi fordulat. Noexcept kulcsszó és mozgatás szemantika.
    10. hét:     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. Az std::function, std::bind és std::ref sablonok használata.
    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:     Nyelvi elemzők elmélete röviden, és C++11 nyelvű megvalósításuk. Haladó operátorhasználat, kifejezésfák építése.
    13. hét:     OOP tervezési minták C++11 nyelvi specifikus megvalósítása. Egyke minta, látogató minta, double-dispatch. Adattag mutatók, szignálok megvalósítása, visszahívások használata. A reflektivitás megvalósításának lehetőségei.
    14. hét:     Többszálúság a C++11 nyelvben. Szálak, mutexek, atomi műveletek, async, future és promise sablonok.

    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 gyakorlat is tartozik, amely a bemutatott programozási elveket, nyelvi elemeket hivatott még több példán keresztül áttekinteni és gyakoroltatni.
    10. Követelmények a.    A szorgalmi időszakban:
    Jelenlét: az előadásokon és a laborgyakorlatokon, a TVSZ rendelkezései szerint.
        Házi feladatok: a félév közben kettő házi feladatot adunk ki, amelyeket még a szorgalmi
    időszakban kell elkészíteni.
        Zárthelyi dolgozat: a félév során egy zárthelyi dolgozatot íratunk.
    b.    A vizsgaidőszakban:
    A vizsgáztatás módja: írásbeli vizsga.
    c.    Megajánlott jegy:
        A házi feladatokkal és a zárthelyi dolgozattal 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 időszakban elkészítendő házi feladatok a szorgalmi időszak utáni pótlási hét végéig pótolhatóak.
    Sikertelen zárthelyi dolgozat egy alkalommal a szorgalmi időszakban, egy alkalommal a pótlási héten pótolható.
    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 órákra 14
    Felkészülés zárthelyire 15
    Házi feladat elkészítése 20
    Kijelölt írásos tananyag elsajátítása 
    Vizsgafelkészülés 15
    Összesen 120
    15. A tantárgy tematikáját kidolgozta

    Név:

    Beosztás:

    Tanszék, Int.:

    Dr. Czirkos Zoltán

    egyetemi adjunktus

    Elektronikus Eszközök Tanszéke