Főoldal

#include <iostream>

int main() {
    std::cout << "Hello world" << std::endl;
}
          

Ez az oldal személyes volta mellett C és C++ nyelveket tanuló hallgatóknak hivatott segítséget nyújtani. Az általam tartott gyakorlatok anyagainak, érdekességeknek, ajánlott irodalomnak, valamint fejlesztést könnyítő eszközöknek ad otthont az oldal.

A gyakorlati anyagokon túl mindenkinek figyelmébe ajánlom az ajánlott irodalom menüpontot, ahol könyveken túl neves C++ konferenciák előadásait tartalmazó linkek is találhatóak azok számára, akik jobban el akarnak mélyedni a nyelv szépségeiben. A C++ referenciák menüpont alatt található linkek jó szolgálatot tehetnek fejlesztés és tanulás közben. Mivel a vizsgán szabad internethozzáférés van, ezért vizsga közben is jól jöhet ezeknek az oldalaknak az ismerete, ezért nem árt őket már készüléskor nézegetni.

Az érdeklődőknek érdemes átfutni a Rólam rovatot is. Itt az általam publikált cikkeken túl tájékozódhat a kutatási projektekről amikben részt veszek, valamint a szabadidős projektjeimről is. Ha valaki kedvet érez arra, hogy csatlakozzon valamelyik kutatási projekthez, akkor feltétlen keressen fel.

Tévhitek

Mivel programozási alapismeretekből és programozásból is C++ a nyelv, amit a hallgatók használnak, ezért vannak akik hajlamosak azt hinni, hogy már értik és ismerik a nyelvet, ezért ezzel a tárggyal nem kell külön foglalkozni. Számukra az a rossz hírem, hogy emiatt a hozzáállás miatt vannak olyan vizsgaalkalmak, mikor 95% felett van a bukási arány. Az előbb említett tárgyaknál nem cél a nyelv részletes megismerése, csupán annak eszközként való felhasználására törekszenek. A nyelv sokkal több annál mint amit ezeken az órákon eddig megismertetek. Hogy egy apró példával szemléltessem a dolgot, az oldal egy egyszerű hello world programmal indul. Tényleg értitek a működését? :)

Bizonyára elmondták nektek, hogy az iostream a standard könyvtárak része, és minden ami benne van, az az std névtérben található, hát ezért kell a fenti kódban std::cout-ot írni. No de mi az a <<? Lehet páran még azt is tudjátok, hogy ez egy operátor, ami túl van terhelve. Aki ezt tudja, bizonyára azzal is tisztában van, hogy a túlterhelt operátor megvalósítása szintén az std névtérben kell, hogy legyen, hiszen az is az STL része. Viszont ha az std névtérben van, miért fordul le a fenti kód, és miért nem std::<<-t kell írni? A válasz az ADL azaz Argument Dependent Lookup, amiről részletesebben gyakorlaton is fogtok majd hallani :) Remélem azzal, hogy a két alapozó tárgy elvégzésének a tantervében annyi sem szerepel a nyelvről, ami a Hello World program megértéséhez elég lenne, sikerült meggyőznöm benneteket, hogy érdemes bejárni órákra, és érdemes foglalkozni ezzel a tárggyal.

Miért érdemes C-t és C++-t tanulni?

Teljesítmény

A C/C++ fordítók rendelkeznek manapság a leghatékonyabb optimalizációs képességekkel. Ezen felül a C++ alapjául az olcsó absztrakciók szolgálnak. Még más nyelvekben egy osztály kötelező indirekciókat és redundáns adattagokat is tartalmazhat, addig C++-ban szinte csak azért "fizetünk" teljesítménnyel, amit használunk is. Emiatt szolgál ez a nyelv a legfejlettebb játékmotorok, szimulációk, CAD szoftverek és operációs rendszerek alapjául. Ez teszi továbbá alkalmassá beágyazott rendszerek fejlesztésére is. A C++-t gyakorlatilag a szoftverfejlesztés minden területén felhasználják, így egy C++ programozó a nyelvválasztásával nem zárja ki magát semelyik területről sem.

Multiparadigma

A C++ szemben a tiszta nyelvekkel (tisztán funkcionális, tisztán objektumorientált) számos programozási paradigmát támogat. Írhatunk struktúrált, funkcionális, objektum orientált vagy akár deklaratív kódot is. Emellett egyedülálló módon támogatja a generatív programozást. Amellett, hogy számos paradigma áll a programozó rendelkezésére, tetszőlegesen keverheti is őket a cél elérése érdekében. Gyakran ez sokkal átláthatóbb és hatékonyabb kódot eredményez mint amit tiszta nyelvek esetében el lehet érni. Emellett a nyelv gazdag eszközkészlettel rendelkezik, ezért szokták sokszor a programozási nyelvek latinjaként is emlegetni. Ha valaki a későbbiekben egy másik nyelvet akar megtanulni, ha előtte ismerte a C++-t akkor sokkal könnyebb dolga lesz, mivel szinte mindegyik nyelvi elemre tud majd C++-os analógiát mondani.

Kifejezőerő

Szemben a közhiedelemmel a C++ nem egy alacsony szintű nyelv, tetszőlegesen magas szinten lehet benne programozni. A statikus típusrendszere számos hibát már fordítási időben kiszűr, ráadásul metaprogramozás segítségével ki is egészíthetjük ezeket a fordítási idejű ellenőrzéseket további szabályokkal, például dimenzió analízissel. Így akár fordítási időben magas szintű szemantikai hibákat is ki lehet szűrni. Ez az egyetlen iparban is elterjedt statikus típusrendszerrel rendelkező nyelv, ahol már több megoldást is adtak az expression-problem megoldására. Az erős de rugalmas típusrendszer mellett a modern C++ kódok ugyanolyan kifejezőerővel rendelkeznek mint a modern script nyelvek.

for(auto i : {1, 4, 5, 6, 8, 9}) std::cout << i*i << std::endl;
          

Multiplatform

A C++ egy multiplatform nyelv, szinte minden operációs rendszerre és processzor architektúrára, valamint a legtöbb beágyazott rendszerre létezik ingyenes és jó minőségű C++ fordító. Emellett számos könyvtár érhető el ezen a nyelven, amik szintén több platformra is elérhetőek. Fejleszthetünk C++-ban akár iOS-re és Androidra is.

Elhelyezkedési lehetőségek

Az egyik legkeresettebb tudás a programozók között a C++ tudás. Magyarországon is számos cég keres C++ programozókat folyamatosan. Köztük: NNG, Prezi, CAE, Graphisoft, Morgan Stanley, Ericsson, Nokia Solutions and Networks, General Electrics Health Care és még sokan mások. Emellett külföldön is számos cég kínál elhelyezkedési lehetőséget. Köztük: Google, Apple, Microsoft, Amazon, Valve, Blizzard, Facebook és még sokan mások.

Érdekességek

Tudtok Hello World-öt írni anélkül hogy pontosvessző legyen a kódban? Tudtok olyan Hello World-öt írni, ahol a main függvény teljesen üres? Mind a kettő lehetséges:

#include <cstdio>

int main() {
    if(printf("Hello world\n")) {}
}
          

#include <iostream>

std::ostream& gvar = std::cout << "Hello world" << std::endl;

int main() {}
          

A gyakorlaton megszerzett tudás alapján egyértelművé fog válni, hogy a fentebbi programok miért működőképesek, és hogyan is működnek pontosan. A gyakorlatban hasznos tudás mellett számos érdekesség is vár azokra akik rendszeresen bejárnak az órákra. Bár számos kódrészletet a honlapon is letölthetővé fogok tenni, ezek mellé semmilyen magyarázatot nem garantálok, valamint csupán a végleges kód kerül feltöltésre, így aki nem jelenik meg, az lemarad a gondolatmenetről ami a kódhoz vezetett.