C11 és C++11 programozás

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

Adatlap utolsó módosítása: 2017. július 3.

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