Osztályok megvalósítása¶
Deklaráció és implementáció¶
Példa header / deklaráció¶
project-root/inc/Hallgato.h
1 2 3 4 5 6 7 |
|
Példa implementáció¶
project-root/src/Hallgato.cpp
1 2 3 4 |
|
A félév során az osztályokat deklarációra és implementációra bontjuk. Ez azt jelenti, hogy kell készítenünk egy .h
és egy .cpp
fájlt. A deklaráció során az osztály metódusait nem valósítjuk meg, nem készítünk neki metódustörzset, ';'-vel zárjuk pl. int calculate_credits() const;
. Ezt a metódust az implementáció során valósítjuk meg a .cpp
fájlban. Ezeket a megvalósításokat le kell fordítanunk!
A metódus megvalósítása során, mivel nem az osztályon belül valósítjuk meg a metódust, meg kell adnunk, hogy pontosan melyik osztályhoz tartozik. Ezt scope operátorral tehetjük meg.
int Hallgato::calculate_credits() const { return this->credits / 30; }
Látható, hogy a metódus a Hallgato
osztályhoz tartozik.
Ahhoz, hogy az implementáció (.src) fordítása során az osztály deklarációja is elérhető legyen, be kell include-olni azt.
Include megadása¶
Az implementáció során az include megadása több módon is történhet. A legegyszerűbb, amikor " " jelek közt adjuk meg a megvalósításhoz (.src) képest relatív útvonalon a deklarációt (.h)
Ha root/inc/.h és root/src/.cpp szerkezetet feltételezünk, akkor az implementációban a relatív elérés a következő lehet:
#include "../inc/Hallgato.h"
Ez igen gyakori, azonban van lehetőségünk megadni include directory -kat. Ekkor az include során az ezen útvonalakhoz képest relatív útvonalat is használhatjuk, akkor is, ha teljesen más helyen helyezkednek el az implementációs (.cpp) fájlok.
Include directory megadása (terminal / g++)¶
Ha terminálból fordítunk, akkor a fordítónak kell megadnunk, hogy mely útvonalak lesznek include útvonalak, így a fordítás során az implementációs (.cpp) fájlokban található #include "path"
útvonalak elérhetők legyenek.
Ezt a -I kapcsolóval adhatjuk meg. A már fentebb említett struktúrát feltételezve, a root könyvtárból fordítva:
g++ src/Hallgato.cpp -I ./inc
Ennek a megadásával az implementáció során a következő include helyes:
#include "Hallgato.h"
hiszen a root/inc include directory, így a benne lévő deklarációk (.h) fájlok elérhetők bárhonnan.
Ha csak a root directory lenne megadva:
g++ src/Hallgato.cpp -I ./
akkor az inc mappát tartalmaznia kell az include útvonalnak, hiszen az alap keresési mappa a root lesz.
#include "inc/Hallgato.h"
Include directory megadása (CMake / CLion)¶
A CMake egy build rendszer, bővebben itt, specifikus kérdések emailben / discordon!
CMake használatakor a generált CMake file hazsnálható, csak meg kell adnunk az include directory-kat.
include_directories(./inc)
sor hozzáadása után a root könyvtárban található inc könyvtár is include directory lesz.
CMake használata terminálból is lehetséges, akkor csak a cmake illetve make programokra van szükség. További információ emailben illetve Discord-on.
Létrehozva: 2022-09-16