Oldaltérkép
- Infó
- Kezdőlap
- Ütemterv
- Csoportbeosztás
- KövetelményekKövetelmények, vizsga információk, pontozás.
- FejlesztőkörnyezetekAz ajánlott, ingyenesen letölthető fejlesztőkörnyezetek listája.
- Windows 10 + ValgrindA valgrind memóriakezelés-nyomkövető telepítése Windows 10-re, CLion mellé.
- Oldaltérkép
- ElérhetőségElérhetőségek, köszönetnyilvánítás.
- Keresés
- Témák
- Tananyag
- Előadás
- 1. hét: BevezetőOOP a C és C++ nyelvekben. Struktúrák és tömbök a C99 nyelvben. C99 összetett literális. Változótól függő típusú pointerek.
- 2. hét: Objektumok memóriaképeObjektumok memóriaképe. Adattag pointerek. Standard-layout objektumok.
- 3. hét: C++11 osztályhierarchiákAz öröklés és néhány jellegzetes tervezési elv a C++11-ben. Privát virtuális függvények, non-virtual interface. Override, final kulcsszavak. Virtuális konstruktorok.
- 4. hét: Erős típusok használataEgy erősen típusos nyelvben a típusok és a függvénynév túlterhelések segítségével egyszerűbben, célratörőbben, biztonságosabban fogalmazhatjuk meg a mondanivalónkat. Az egyes részfeladatainkat, megkötéseinket is új típusokkal modellezhetjük. Ez az írás néhány példát mutat meg, hogyan lehet ezeket az eszközöket használni.
- 6. hét: Objektumok élettartamaSzabad és kötött változók. Funarg problémák. Pointer és referencia szemantika. Temporális változók és destruktorok. Okos pointerek, referenciaszámlálás.
- 7. hét: Tároló osztályokAlacsony szintű memóriakezelés. New operátorok, tároló osztályok, iterátorok. Tömbök és referenciák. Inicializáló listák, az auto és a decltype kulcsszavak. Az std::begin és az std::end függvények. Paraméterátadási szabályok, tömbök referenciái.
- 8. hét: Jobbérték referenciákMásolások problémája, tulajdonos szemantika. Jobbérték referenciák, mozgató konstruktorok.
- 9. hét: KivételekKivételek és erőforráskezelés. Kivételbiztos kód, garanciák. Másoló és mozgató konstruktorok kivételkezelés mellett.
- 10. hét: λMagasabb rendű függvények. Az std::bind és std::ref manipulátorok. Lambda kifejezések. Az std::function függvénysablon. Összetett példa a lambda kifejezések használatára.
- 11. hét: Sablon metaprogramozásSablonok használata. Viselkedés- és típusinformációs osztályok. A SFINAE szabály. A sablon metaprogramozás elemei.
- 12. hét: Paraméterlisták és -továbbítás, ...Változó hosszúságú sablonparaméterlista. Sablonparaméterek típushelyes továbbítása. Az std::move és az std::forward függvények.
- 13. hét: TöbbszálúságTöbbszálú programok írása C++11. Szál és mutex segédosztályok.
- 14. hét: Nyelvi elemzőkNyelvi elemzők írása és egy nyelvi elemző keretrendszer
- 1. hét: Bevezető
- Labor
- 1. hét: C++ fejlesztőeszközökC++11 fordítók, parancssori fordítás és linkelés.
- 2. hét: OOP tervezés, C++ frissítőOOP tervezés, OOP szemlélet erősítése.
- 3. hét: C++11 osztályhierarchiákÖrökléssel kapcsolatos feladatok; főként ismétlés, gyakorlás.
- 4. hét: Erős típusok használataTípusok, I/O manipulátorok, operátorok átdefiniálása.
- 5. hét: STLÖsszetett feladatok, rövid megoldásokkal. Lényeg, hogy minél több elemet használjunk az STL-ből!
- 6. hét: Objektumok élettartamaFunarg problémák kezelése C++ kódban. RAII és okos pointerek írása.
- 7. hét: Haladó memóriakezelésPlacement new, osztályok saját operator new függvényei, allokátorok.
- 8. hét: Jobbérték referenciákTulajdonos szemantika és hatékonyság: mozgató konstruktorok és jobbérték referenciák alkalmazása.
- 9. hét: KivételekKivételkezelés
- 10. hét: λMagasabb rendű függvények. Lambda kifejezések. Az std::function függvénysablon. Összetett példa a lambda kifejezések használatára.
- 12. hét: Sablon metaprogramozás I.Stratégia és típusinformációs osztályok írása.
- 13. hét: Sablon metaprogramozás II.Sablon metaprogramozás: fordítási idejű kiértékelés, rekurzió, jobbrekurzió.
- 14. hét: Nyelvi elemzőkNéhány levezető feladat.
- 1. hét: C++ fejlesztőeszközök
- Nagy házi feladatA nagy házi feladatok leírása: az elsőhöz a konkrét specifikáció, a másodikhoz ötletek.
- Feladatok
- 0. hét: Összetett feladatokA tárgy anyagához szorosan nem kapcsolódó, nehezebb programozási feladatok.
- 2. hét: C99 nyelvi elemek
- 3. hét: Objektumok memóriaképe
- 4. hét: C++11 osztályhierarchiák
- 5. hét: Típusok használata
- 6. hét: Objektumok élettartama
- 7. hét: Tároló osztályok
- 8. hét: Jobbérték referenciák
- 9. hét: Kivételek
- 10. hét: λ
- 12. hét: Sablon metaprogramozás
- 13. hét: Paraméterlisták és -továbbítás, ...
- 14. hét: Concepts
- 0. hét: Összetett feladatok
- Prog2 emlékeztető
- MemóriakezelésA memória „típusairól” és a memóriakezelésről.
- #includeForrásfájlok és fejlécfájlok használata.
- inlineInline C-ben és C++-ban
- constMit jelent a const a tagfüggvényeknél? A paramétereknél, a visszatérési értéknél? Milyen programozási hibák ellen véd?
- ReferenciákRöviden a referenciákról és a pointerekkel való kapcsolatukról.
- Érték és konstans referencia
- OperátorokOperator overloading
- TárolókTömb – egy egyszerű tároló osztály létrehozása
- IterátorokMik azok az iterátorok? Hogy működnek?
- ÖröklésAz öröklés és a vele kapcsolatos tudnivalók a C++-ban.
- STLSTL és iostream gyorstalpaló
- Cast-okNéhány szó a cast-okról
- TemplateA sablonok használata
- Template szintaxisA sablon osztályok és sablon függvények szintaxisa
- Memóriakezelés
- Előadás
- Extrák
- Szorgalmi feladatok
- Irodalom, blogokAjánlott olvasmány, könyvek, blogok
- C
- C99 restrictA C99 restrict kulcsszóról és az optimalizálásról néhány gondolat.
- Öröklés C-benObjektumok memóriaképe I. A tartalmazás és az öröklés közötti összefüggés. Az öröklés megvalósítása C-ben. A virtuális függvények működése. C nyelvű OOP keretrendszerek.
- C99 restrict
- C++ elemek, eszközök
- C++14/17C++14/17 újdonságok
- void_tvoid_t: a template metaprogramozás egyik csodafegyvere
- std::string_viewHány sztring osztályunk van egy projekten belül? Mennyi bosszúságot okoz ez? Hogy segíthetünk ezen?
- operator delete mérettelA felszabadított memóriaterületek méretét néha ismerjük. Miért jó ez? Hogy jelenik meg a programban? Hogyan következtet erre a fordító?
- ConceptsA concept nyelvi elem, amely a legújabb C++ szabvány, a C++20 része lett.
- Digitális rendszerek szimulációjaDigitális rendszerek szimulációja C++-ban. Ebben a példában a szálkezelés célja, hogy az egyes függvények látszólag egymás mellett fussanak; mindegyiknek saját verme lehessen.
- C++14/17
- Nyelvészet
- Szintaktikai szörnyűségek
- Függő nevek: typename A::BTemplatelt osztályból öröklődés rejtelmei
- Temporális objektumokNéhány történelmi érdekesség a temporális objektumok élettartamával, másolásával kapcsolatban.
- Az elavult std::auto_ptrMi volt a baj a régi std::auto_ptr-rel? Miért került ki a szabványból? Hogy volt megvalósítva?
- Sablon függvények és paramétereik: type_identityLegtöbb esetben egyszerűen hagyjuk a fordítónak, hogy a függvényhívásból levezesse a sablon függvényeink paramétereit. Néha azonban ez látszólag triviálisnak tűnő helyzetekben nem sikerül neki.
- Technikák
- Heterogén kollekció perzisztenciájaHeterogén kollekciók és perzisztencia. Hogyan használunk virtuális függvényt a beolvasásnál, amíg azt sem tudjuk, milyen típusú objektum adatait kell beolvasni?
- BittömbPakolt tömb indexelése
- PropertyC# stílusú „property” az objektumokban
- I/O manipulátorokAz std::setw-hez hasonló manipulátorok írása.
- Reflexió C++-banAz előadás példájának folytatása: az adattag pointereket type erasure-be csomagolva elérhetjük, hogy többféle típusú adattag esetén is tudjunk iterálni azokon.
- vector::push_back I.Miért másolja az std::vector push_back() függvénye előbb az új adatot, és csak utána a régieket?
- vector::push_back II.Miért mozgatja az std::vector push_back() függvénye előbb az új adatot, és csak utána a régieket?
- Milyen típus?Sablon osztály, amely a példányosító típus nevét tartalmazza sztringként.
- SuperNoisyMemóriakezelést, explicit konstruktor- és destruktorhívásokat ellenőrző segédosztály.
- Heterogén kollekció perzisztenciája
- Kifejezésfa refaktor
- I. rész: MemóriakezelésAz előadáson bemutatott kifejzésfa program refaktorálásának első része: a memóriakezelés.
- I/b. rész: GyártófüggvényekMellékszál a kifejezésfa program refaktorolásában: gyártófüggvények és CRTP.
- II. rész: Adatszerkezet és tevékenységekA kifejezésfákon dolgozó tevékenységek kiszervezése külön osztályokba: a Visitor (látogató) tervezési minta.
- III. rész: Az enum-alapú VisitorA Visitor tervezési minta egy egyszerű enum típusú tagváltozó segítségével is megvalósítható. Ehhez típus szerinti switch()-re van szükség, de ez a switch() egyetlen egy helyen jelenik csak meg a kódban.
- III/b. rész: A Visitor minta más nyelvekbenEz az írás megmutatja, hogy a Visitor tervezési mintát hogyan kell implementálni egy egész más felépítésű programozási nyelvben, a JavaScript-ben. Spoiler alert: sehogy, nincsen rá szükség.
- I. rész: Memóriakezelés
- Epilógus
- I. rész: Paraméterként átadott függvényekMilyen lehetőségeink vannak arra, hogy paraméterként függvényt adjunk át?
- II. rész: Függvény építése RPN kifejezésbőlA futási időben létrehozott függvényeknek iskolapéldája a négy alapműveletes matematikai kifejezés. Milyen lehetőségeink vannak, hogy felépítsünk egy ilyen függvény objektumot?
- III. rész: Változók és belső függvényekMilyen lehetőségeink vannak a downwards funarg problem megoldására?
- IV. rész: Heterogén kollekcióHogyan építhetünk heterogén kollekciót? Hogyan másoljuk meg azt, és miképpen oldható meg az objektumok memóriakezelése?
- I. rész: Paraméterként átadott függvények
- Letölthető változat