K-INFO
HU
EN
Belépés

C11 és C++11 programozás

C11 and C++11 Programming
A tantárgyleírás hatályossága
Hatályosság kezdete:
2026. March 21.
Hatályosság vége:
Tantárgy neve (magyarul, angolul)
C11 és C++11 programozás
C11 and C++11 Programming
Tantárgykód BMEVIEEAV01
Tantárgyjelleg
Képzési szint
Kurzustípusok és óraszámok (heti/féléves)
Kurzustípus elmélet gyakorlat laboratóriumi gyakorlat
óraszám (heti) 2 0 2
jelleg (kapcsolt/önálló) kapcsolt
Tanulmányi teljesítmény/értékelés típusa vizsga
Tantárgy kreditértéke 4
Tantárgyfelelős
DR. Pohl László
beosztás: egyetemi docens
Tantárgyat gondozó oktatási szervezeti egység
Elektronikus Eszközök Tanszéke
Kar Villamosmérnöki és Informatikai Kar
Tantárgy weboldala
Tantárgy elsődleges mintatantervi jellege
Közvetlen előkövetelmények – Erős előkövetelmény nincs
Közvetlen előkövetelmények – Gyenge előkövetelmény nincs
Közvetlen előkövetelmények – Párhuzamos előkövetelmény nincs
Közvetlen előkövetelmények – Mérföldkő előkövetelmény nincs
Közvetlen előkövetelmények – Kizáró feltétel nincs

Célkitűzés

Tantárgyprogram

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.

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.

Tanulmányi eredmények

Ez a tantárgy a KKK rendeletben meghatározott, következő kompetenciák fejlesztését szolgálja:

Tudás

Nincsenek rögzített tanulási eredmények.

Képességek

Nincsenek rögzített tanulási eredmények.

Attitűd

Nincsenek rögzített tanulási eredmények.

Autonómia és felelősség

Nincsenek rögzített tanulási eredmények.

Oktatási módszertan

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.

Tanulástámogató anyagok

Online források
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

A tantárgy teljesítéséhez ajánlott előzetes ismeretek

Tudás típusú kompetenciák
(azon előzetes ismeretek összessége, amelyek megléte nem kötelező, de a tantárgy eredményes teljesítését nagyban elősegíti)
Programozási gyakorlat, C és C++ programozási nyelv alapvető ismerete.
Képesség típusú kompetenciák
(azon előzetes képességek és készségek összessége, amelyek megléte nem kötelező, de a tantárgy eredményes teljesítését nagyban elősegíti)
nincs
Ajánlott (nem kötelező) előzetesen megszerzendő kompetenciák
(azon ajánlott (nem kötelező) előzetesen megszerzendő kompetenciák összessége, amelyek jelentősen hozzájárulnak a tantárgy eredményes teljesítéséhez)
Programozási gyakorlat, C és C++ programozási nyelv alapvető ismerete.
Általános szabályok
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. 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.
Teljesítményértékelési módszerek
Szorgalmi időszakban végzett teljesítményértékelések részletes leírása

Nincs megadva részletes értékelés.

Szorgalmi időszakban végzett teljesítményértékelések részaránya

Nincs megadva részarány.

Vizsgaidőszakban végzett teljesítményértékelések részletes leírása

Nincs megadva részletes értékelés.

Vizsgarészek részaránya

Nincs megadva részarány.

Érdemjegy megállapítása

Nincs megadva érdemjegy határ.

Jelenléti és részvételi követelmények

Nincs megadva jelenléti követelmény.

Javítás, ismétlés és pótlás különös szabályai

Nincs megadva.

Rövid leírás

Nincs megadva.

Részletes leírás

Nincs megadva.

Ajánlott tantárgyak

Nincs megadva.

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

Nincs megadva munkaidő bontás.

Tantárgykövetelmények hatályossága
Tantárgykövetelmények hatályosságának kezdete:
Tantárgykövetelmények hatályosságának vége:
Tantervi elhelyezés

Nincsenek rögzített tantervi elhelyezések ehhez a tárgyverzióhoz.