Ha külön fájlt szeretnék minden egyes classhoz, akkor a class sourcet hova írjam?





"A classban levő függvényeket, változókat a .h vagy .cpp fájlba írjam? Mi a különbség a 2 közt?"
Általánosságban a .h a deklarációk helye, a .c a definíciók ill. implementáció helye. Követendő irányelv, hogy a header (.h) fájlokba nem teszünk semmi olyat, ami akár csak egy bájtnyi konkrét kóddá is fordulna. Ugyanis ha azt beemeled egy rakás más .c fájlba, akkor a fordító mindben legenerálja ugyanazt a kódot, és épp ezt kerüljük el a különböző fordítási egységekkel.
Pl.
// test.h:
int add(int a, int b);
// Ez egy függvény deklaráció, csak a fordítónak szól, hogy ahova be-include-olod, ott bele tudja fordítani a kódba az add() függvényre vonatkozó hívási szekvenciát, magyarul képes legyen meghívni a függvényt. Ott a fordítót nem fogja érdekelni, hogy a függvény mit csinál, azt megoldja a függvény saját fordítási egységében.
// test.c:
#include "test.h"
// ...itt már akár hívható az add()
int add(int a, int b) {return a+b;}
// Ez a függvény implementálása, vagyis megadjuk a függvény kódját is, ami majd lefut, ha meghívjuk. Ez már konkrét utasítás sorozattá fordul, és jó esetben csak egy tárgykódban fog szerepelni, vagyis a kész futtatható kódban is csak egyszer.
Osztályok hasonlóképpen:
// test2.h
class TestClass {
int i;
public:
TestClass(int param);
};
// test2.c
#include "test2.h"
TestClass::TestClass(int param) {i=param;}
// Itt adjuk meg, hogy a valódi kód miből áll. Minden más adatszerkezetekre, prototípusokra, stb. vonatkozó infó a header-ben van.





// ***** egyik.h *****
#ifndef _EGYIK_H_INCLUDED // Ne lehessen többször include-olni az egyik.h fájlt.
#define _EGYIK_H_INCLUDED
// Az egyik.cpp fájlból annak a fuggvenynek a prototipusa,
// amelyet más .cpp fájlból is megszeretnél hívni.
void egyik_nyilvanos_fuggveny();
#endif // _EGYIK_H_INCLUDED
// ***** egyik.cpp *****
#include <iostream>
#include "masik.h" // Elérhetõ legyen az összes masik.h-ban deklarált függveny.
#include "egyik.h" // Párosítjuk az egyik.cpp forráskód fájlt az egyik.h fejléc fájlal.
void egyik_nyilvanos_fuggveny() {
std::cout<<"A masik_nyilvanos_fuggveny() cime: ";
std::cout<<(void*)masik_nyilvanos_fuggveny<<"\n"; // A masik.cpp fájlban van definiálva.
std::cout<<"Hello, egyik!\n";
}
// ***** masik.h *****
#ifndef _MASIK_H_INCLUDED // Ne lehessen többször include-olni a masik.h fájlt.
#define _MASIK_H_INCLUDED
// A masik.cpp fájlból annak a fuggvenynek a prototipusa,
// amelyet más .cpp fájlból is megszeretnél hívni.
void masik_nyilvanos_fuggveny();
#endif // _MASIK_H_INCLUDED
// ***** masik.cpp *****
#include <iostream>
#include "egyik.h" // Elérhetõ legyen az összes egyik.h-ban deklarált függveny.
#include "masik.h" // Párosítjuk a masik.cpp forráskód fájlt az masik.h fejléc fájlal.
void masik_nyilvanos_fuggveny() {
egyik_nyilvanos_fuggveny(); // Az egyik.cpp fájlban van definiálva.
std::cout<<"Hello, masik!\n";
}
// ***** main.cpp *****
#include "masik.h" // Elérhetõ legyen az összes masik.h-ban deklarált függveny.
int main() {
masik_nyilvanos_fuggveny(); // A masik.cpp fájlban van definiálva.
return 0;
}
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!