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 (PZH-ra, PPZH-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. Tematikája megegyezik a ZH-val.
- 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. (pl. írj egy std::shared_ptr implementációt) Ezt kiegészítve extra feladatokkal (melyeket szintén az előadó határoz meg), szorgalmi pontokat kapsz. Vigyázz! Nagyon pontosan kell teljesítened a követelményeket, különben az előadó nem fogadja el és javítás után újra be kell adnod amíg 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 találatok
- 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. Ha elkésel, még aláírhatod. A feladatsort megoldani nem kötelező, de mivel nincs nagyon alternatíva ezért jobbára mindenki ezt csinálja. Ha kész lennél vele, előbb elmehetsz, bár ez leginkább lehetetlen.
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ögni egy-egy komplikált feladaton, nagyon komoly előnyt jelent a szorgalmik elkészítése.