C11 és C++11 programozás
A tárgy a C és C++ nyelv elmúlt 15-20 év alatt bekövetkezett változásait, újdonságait mutatja be, példátlanul alapos módon.
Követelmények
Előtanulmányi rend
A programozás alapjai II tárgyból kredit megszerzése szükséges a tárgy felvételéhez. - Alapos ismerete szükséges a tárgy magabiztos teljesítéséhez!
A szorgalmi időszakban
- Az aláírás feltételei:
- A laboralkalmak legalább 70%-án való részvétel. - a laborfeladat utólagos elküldésével és/vagy tárgyfelelőssel való megbeszélés után túl lehet lógni a 70%-on, de alapos indok kell
- ZH sikeres (min. 50%) megírása.
- Megajánlott jegy: gyakorlatilag a ZH-ra megajánlott vizsgajegyet kapsz.
- Pótlási lehetőségek:
- A ZH-t utolsó héten lehet pótolni és van egy pót-pótlási lehetőség póthéten.
A vizsgaidőszakban
- Vizsga: írásbeli. Mivel megajánlott jegyet kap mindenki 1-es fölött, és erre van 2 javítási lehetőség, gyakorlatilag nincs vizsga.
- Előfeltétele: az aláírás megléte.
Félévvégi jegy
- A jegyet a ZH pontszámára és a szorgalmi pontokra kapod a következő módon:
- Ponthatárok:
P Jegy 0 - 19 1 20 - 24 2 25 - 29 3 30 - 34 4 35 - 5
Ütemterv
Természetesen az ütemterv változhat, ez csak egy időbeosztást könnyítő táblázat.
Hét Előadás Labor Esemény 1 Bevezető és C99 nyelvi elemek C11 és C++11 fejlesztőeszközök - 2 Objektumok memóriaképe A linkelés rejtelmei - 3 Adattag pointerek OOP tervezés - 4 Osztályhierarchiák C++11-ben C++11 öröklés - 5 Típusok használata Típusok használata kis HF kiadás 6 Változók élettartama Változók élettartama - 7 Tároló osztályok Haladó memóriakezelés - 8 Jobbérték referenciák Jobbérték referenciák - 9 Kivételek Kivételek - 10 Sablon metaprogramozás Sablon metaprogramozás I. nagy HF kiadás 11 Paraméterlisták és -továbbítás Sablon metaprogramozás II. - 12 Lambda függvény Lambda függvény - 13 Többszálúság - ZH 14 Nyelvi elemzők Összetett feladatok kis, nagy HF beadás, PZH póthét - - PPZH
Tematika
Részletes változat, hogy tudd, miről lesz szó és eszerint vedd fel a tárgyat - vagy sem.
- Bevezető és C99 nyelvi elemek
- Típusok és osztályok
- C99 jelölt inicializáló adattagok és összetett típusok literálisai
- A C99 változó méretű tömbök (variable length array, VLA)
- A C99 restrict kulcsszó
- Objektumok memóriaképe
- Öröklés C-ben
- A virtuális függvények
- Adattag pointerek
- Perzisztencia
- Iterálás az adattagokon
- Reflektivitás C++-ban
- Osztályhierarchiák C++11-ben
- Kifejezések, konstansok, változó
- Típusok használata
- RAII = Resource Acquisition is Initialization
- A koordinátarendszerek
- Változók élettartama
- Szabad és kötött változók
- A funarg problémák
- Érték és pointer szemantika, okos pointerek
- Tároló osztályok
- Hányféle new operátor van?
- Az std::vector megvalósítása
- Az iterátorok és az auto kulcsszó, „range-based for” ciklus
- std::initializer_list
- Jobbérték referenciák
- A sok felesleges másolás problémája, tulajdonos szemantika problémája
- Balértékek és jobbértékek (lvalues and rvalues), mozgató konstruktorok
- Az std::move() függvény használata
- Kivételek
- A throw/catch vezérlési szerkezet
- A konstruktordelegálás szerepe a kivételkezelésben, alap, erős, és noexcept garanciák
- Sablon metaprogramozás
- Sablonok tárolóknál és algoritmusoknál, típusinformációs osztályok használata
- SFINAE
- Paraméterlisták és -továbbítás
- C++11 változó hosszúságú sablonparaméterlista
- A C++11 új levezetési és összevonási szabályai
- Az std::move() és az std::forward() függvények
- Lambda függvény
- Függvények manipulációja: std::bind és std::ref
- Lambda kifejezések, funarg problémák: a [] zárójelpár szerepe
- std::function
- Többszálúság
- thread, mutex és lock_guard osztályok közös használata
- A holtpont, atomi típusok
- std::condition_variable, std::async és std::future
- Nyelvi elemzők (alkalmi előadás)
Segédanyagok
Hivatalos egyetemi jegyzetek
Mindenki aki felveszi a tárgyat, hozzáfér az ultimate jegyzethez, azaz az előadásanyaghoz ami a tárgy honlapján érhető el.
Számonkérések
Zárthelyi
Körülbelül ilyen struktúrával kell számolni:
- Első rész
- Válaszolj röviden
- Alkalmazd a C++11-ben tanult nyelvi elemeket (azaz írj át modernné egy pár soros C++98 kódot)
- Igaz-Hamis
- Második rész
- 2-3db fél A4-es oldalon átlagos betűkkel lekódolható program. pl. implementálni kell modern nyelvi eszközökkel egy tárolót, vagy fel kell tölteni megfelelő konstruktorokkal és másoló operátorral egy osztályt.
- Lehet választani a két utolsó feladat közül. Ha mindkettőt megírod mindkettőre kaphatsz pontot.
Kis Házi
Az előadó által meghatározott feladatot kell teljesíteni. Ezt kiegészítve pluszfeladatokkal, szorgalmi pontokat kapsz. (pl. írj egy std::shared_ptr implementációt) Vigyázz! Nagyon pontosan kell teljesítened a követelményeket, különben az előadó nem fogadja el.
Nagy Házi
Kitalálsz egy feladatot magadnak, elküldöd az előadónak, ha bólint rá, megírod C++11-ben. Talán nem is jó a nagyházi kifejezés mivel, az elsővel ellentétben itt semmilyen szigorú elvárásnak nem kell megfelelnie.
Linkek
Tárgyoldal - legfontosabb C/C++ referencia - ha nem lenne elektronikus, a félév alatt rojtosra lenne lapozva Google - "C++ <probléma kulcsszavai>" --> Stack Overflow Olvasásra: The C++ Programming Language (4th Edition)
Tippek
Előadás
Egy előadáson kb. 30-an vagytok. Búg a projektor, az előadó előad, programozik a kivetítőn, rajzol a táblára. Barátságos a légkör, mindenki azt kérdez amit akar. És még jelenlét sincs. Megéri bemenni, de a tárgyoldal részletessége miatt szükség esetén akár teljesen ki lehet hagyni.
Labor
Számítógép laborban leültök, csináljátok a feladatsort, mint szoftlabon. Óra elején jelenléti ív megy körbe. A feladatsort megoldani nem kötelező, de mivel nincs nagyon alternatíva ezért jobbára mindenki ezt csinálja.
Szorgalmi feladatok
Év közben minden héten akár 2-3 szorgalmi feladat is befuthat az infoc oldalra gyanúsan hasonlító felületre. Itt leginkább meglévő STL függvényeket kell implementálni, valamilyen trükköt kell alkalmazni, a metaprogramming témakör után pedig egyszerűen csak elszabadul a pokol.
Szorgalmi pontozás
Valamilyen ikonszerűségek vannak a feladat mellett. Körülbelül 10 pontot lehet összesen elérni, ez +2 jegy!!! Tehát ha van kedved minden héten napokig hümmögnöd egy-egy komplikált feladaton, nagyon komoly előnyt jelent a szorgalmik elkészítése.