static member function
Megjelenés
Főnév
static member function (tsz. static member functions)
- (informatika) A statikus tagfüggvény (static member function) a C++ programozási nyelvben egy olyan osztályon belül deklarált függvény, amely nem tartozik konkrét példányhoz (objektumhoz), hanem az osztályhoz magához. Ez a tulajdonság különlegessé és hasznossá teszi a statikus tagfüggvényeket, különösen akkor, amikor valamilyen globális műveletet szeretnénk elérhetővé tenni az osztály kontextusán belül, de nincs szükség példányosításra.
🧱 Szintaxis és alapok
class MyClass {
public:
static void staticFunction(); // deklaráció
};
A függvényt így lehet definiálni:
void MyClass::staticFunction() {
std::cout << "Ez egy statikus tagfüggvény." << std::endl;
}
🧠 Tulajdonságok
- Nem fér hozzá
thismutatóhoz, mivel nincs példányhoz kötve. - Csak más statikus adattagokat és függvényeket érhet el közvetlenül.
- Kívülről az osztálynévvel kell hivatkozni rá:
MyClass::staticFunction();
- Lehet private, protected, vagy public – ahogy bármelyik másik tagfüggvény.
🎯 Mire jó?
- Segédfüggvényként, amely az osztály kontextusához tartozik, de nem igényel objektumot.
- Statikus adattagok kezelésére (pl. számlálók, logika, konverziós függvények).
- Gyári (factory) függvényként, amikor objektumokat hozunk létre az osztályon belül.
- Singleton minta megvalósításában.
🔧 Példa – Számláló
class Counter {
private:
static int count;
public:
Counter() { ++count; }
static int getCount() { return count; }
};
int Counter::count = 0;
int main() {
Counter c1, c2, c3;
std::cout << "Példányok száma: " << Counter::getCount() << std::endl;
}
Kimenet:
Példányok száma: 3
🧱 Statikus függvény vs normál tagfüggvény
| Jellemző | Statikus tagfüggvény | Normál tagfüggvény |
|---|---|---|
this mutató elérhető? |
❌ Nem | ✅ Igen |
| Példány kell a híváshoz? | ❌ Nem | ✅ Igen |
| Statikus adattag elérhető? | ✅ Igen | ✅ Igen |
| Nem statikus adattag? | ❌ Nem | ✅ Igen |
🔄 Használat gyakorlatban
1. Segédfüggvényként
class MathUtils {
public:
static int square(int x) {
return x * x;
}
};
int main() {
std::cout << MathUtils::square(5); // 25
}
2. Singleton minta
class Singleton {
private:
static Singleton* instance;
Singleton() {} // privát konstruktor
public:
static Singleton* getInstance() {
if (!instance)
instance = new Singleton();
return instance;
}
};
Singleton* Singleton::instance = nullptr;
3. Factory metódus
class Pizza {
public:
static Pizza createMargherita() {
return Pizza("margherita");
}
private:
std::string type;
Pizza(std::string t) : type(std::move(t)) {}
};
🧩 Nehézségek és korlátok
- Nem lehet
virtual– tehát nem örökíthető polimorf módon. - Nem lehet
constvagyvolatile, mert ezek az objektum állapotára utalnak. - Nem fér hozzá nem statikus adattagokhoz.
- Több szálas környezetben, ha módosít statikus adattagot, szinkronizációra lehet szükség (
mutex,std::atomic).
🧪 Statikus tagfüggvény sablonos osztályban
template<typename T>
class MyContainer {
public:
static void printType() {
std::cout << "Típus: " << typeid(T).name() << std::endl;
}
};
int main() {
MyContainer<int>::printType();
MyContainer<std::string>::printType();
}
🔐 Hozzáférési szintek
- private static függvények: belső logikához (pl. validáció).
- public static függvények: külső használatra.
- protected static függvények: örökölt osztályokon belüli használatra.
🧭 Összefoglalás
A C++ statikus tagfüggvényei erőteljes eszközök, ha:
- nem szükséges objektum a művelethez,
- mégis az osztályon belül szeretnénk megtartani a logikát,
- globális hatókör helyett strukturált kapszulázást akarunk.
Statikus függvényeket főként utility logikák, factory metódusok, globális számlálók, egység példányosítás és program inicializálás során hasznos alkalmazni.
- static member function - Szótár.net (en-hu)
- static member function - Sztaki (en-hu)
- static member function - Merriam–Webster
- static member function - Cambridge
- static member function - WordNet
- static member function - Яндекс (en-ru)
- static member function - Google (en-hu)
- static member function - Wikidata
- static member function - Wikipédia (angol)