header file
Főnév
header file (tsz. header files)
- (informatika) A header fájlok (magyarul fejlécfájlok) a C++ programozásban használt fájlok, amelyek deklarációkat és makrókat tartalmaznak. Ezek segítségével a kód modulárisabbá, átláthatóbbá és újrahasználhatóbbá válik.
1. Mi az a header fájl?
A header fájl egy olyan fájl, amely általában .h vagy .hpp kiterjesztéssel rendelkezik, és amelyben osztályok, függvények, konstansok és makrók deklarációi találhatók. A header fájlokat az #include direktíva segítségével csatoljuk a programunkhoz.
Példa egy egyszerű header fájlra (myheader.h):
#ifndef MYHEADER_H
#define MYHEADER_H
void hello(); // Függvény deklaráció
#endif // MYHEADER_H
És a hozzá tartozó forrásfájl (myheader.cpp):
#include <iostream>
#include "myheader.h"
void hello() {
std::cout << "Helló, világ!" << std::endl;
}
Használata a main.cpp fájlban:
#include "myheader.h"
int main() {
hello();
return 0;
}
2. Miért használunk header fájlokat?
- Modularitás: A kód kisebb, kezelhetőbb részekre bontható.
- Újrahasználhatóság: Ugyanaz a deklaráció több fájlban is használható.
- Kód elválasztása: Az implementációt és a deklarációt külön fájlba helyezhetjük.
3. A header fájlok tartalma
Egy tipikus header fájl az alábbiakat tartalmazhatja:
3.1. Makrók és konstansok
#ifndef PI
#define PI 3.14159
#endif
3.2. Függvénydeklarációk
void printMessage();
int add(int a, int b);
3.3. Osztályok deklarációja
class MyClass {
public:
void show();
};
3.4. Névtér (namespace) használata
namespace MyNamespace {
void doSomething();
}
4. Header fájlok beillesztése
A #include direktíva segítségével tudjuk csatolni a header fájlokat:
4.1. Standard könyvtári header fájlok
#include <iostream> // Beépített fájl, ezért <> jelek között van
4.2. Saját header fájlok
#include "myheader.h" // Saját fájl, ezért idézőjelek között van
A különbség: - A < > jelekkel körülvett fájlokat a fordító a rendszerkönyvtárakban keresi. - Az ” ” (idézőjelek) közötti fájlokat először az aktuális projekt könyvtárában keresi a fordító.
5. Header fájlok védelme az ismételt beillesztés ellen
A header fájlokat többször is beilleszthetjük egy programba, ami dupla deklarációt és fordítási hibát eredményezhet. Ennek megelőzésére használjunk header guardokat vagy #pragma once-ot.
5.1. Header guard használata
#ifndef MYHEADER_H
#define MYHEADER_H
void hello();
#endif // MYHEADER_H
5.2. #pragma once használata
#pragma once
void hello();
A #pragma once modern alternatívája a header guardoknak, és megakadályozza, hogy egy fájlt többször beolvassanak.
6. Osztályok implementálása header fájlban
A header fájlban általában csak az osztályok deklarációja található, míg az implementációt egy külön forrásfájlba tesszük. Példa:
6.1. Header fájl – myclass.h
#ifndef MYCLASS_H
#define MYCLASS_H
class MyClass {
public:
void show();
};
#endif // MYCLASS_H
6.2. Implementáció – myclass.cpp
#include <iostream>
#include "myclass.h"
void MyClass::show() {
std::cout << "Üdv a C++ világában!" << std::endl;
}
6.3. Használat – main.cpp
#include "myclass.h"
int main() {
MyClass obj;
obj.show();
return 0;
}
7. Inline függvények a header fájlban
Ha egy függvény nagyon rövid, akkor a header fájlban is implementálhatjuk az inline kulcsszóval:
#ifndef MATHUTILS_H
#define MATHUTILS_H
inline int square(int x) {
return x * x;
}
#endif // MATHUTILS_H
Az inline függvények nem okoznak duplikált definíciót, mert a fordító minden használatnál behelyettesíti a függvény kódját.
8. Template osztályok a header fájlban
A template-eket szintén header fájlban kell implementálni, mivel a fordító a sablonokat az adott használati helyen generálja.
#ifndef TEMPLATE_H
#define TEMPLATE_H
template <typename T>
class Box {
T value;
public:
Box(T v) : value(v) {}
T getValue() { return value; }
};
#endif // TEMPLATE_H
Használata:
#include <iostream>
#include "template.h"
int main() {
Box<int> intBox(5);
std::cout << intBox.getValue() << std::endl;
return 0;
}
9. Header fájlok és az #include sorrendje
Ajánlott először a standard könyvtárakat, majd a saját fájlokat beilleszteni:
#include <iostream>
#include <vector>
#include "myheader.h"
#include "mathutils.h"
Ez segít minimalizálni a függőségi problémákat és a fordítási időt.
10. Rossz gyakorlatok a header fájlokkal kapcsolatban
- Felesleges függvényimplementáció header fájlban (kivéve inline vagy template esetén).
- Nincs header guard vagy #pragma once, ami duplikált deklarációhoz vezethet.
- Túl sok globális változó a header fájlban, ami ütközést okozhat.
Összegzés
A header fájlok a C++ programok elengedhetetlen részei, és segítenek a kód strukturálásában és újrahasználhatóságában. Az alábbi alapelveket érdemes követni: 1. Használj header guardot vagy #pragma once. 2. Deklarációkat és definíciókat különítsd el. 3. Szükségtelen függőségeket kerüld. 4. Moduláris és tiszta kódot írj.
- header file - Szótár.net (en-hu)
- header file - Sztaki (en-hu)
- header file - Merriam–Webster
- header file - Cambridge
- header file - WordNet
- header file - Яндекс (en-ru)
- header file - Google (en-hu)
- header file - Wikidata
- header file - Wikipédia (angol)