Statikus tag funkció be C++ (Példák)
Mit tartalmaz a statikus függvény? C++?
In C++ osztályok esetén a statikus tag olyan osztálytag, amely az osztályhoz tartozik, nem pedig az objektumaihoz. A tagságból csak egy példányod lesz. Ez a helyzet a létrehozott objektumok számától függetlenül.
Ha egy osztályfüggvény statikusként van definiálva, az összes osztályobjektum megoszt egy statikus osztálytagot. A statikus függvény tehát osztályobjektumok létrehozása nélkül is elérhető, és függetlenné válik osztályú objektumok. Statikus adattag be C++ más statikus függvényekhez férhet hozzá, csak az osztályon kívül.
Miért érdemes statikus függvényeket használni?
Eltérően C++ a globális függvények, a statikus függvények csak a deklarációs fájlból érhetők el. Ha korlátozni kell egy funkcióhoz való hozzáférést, tegye statikussá.
Használjon statikus függvényt, hogy korlátozza ugyanazon függvénynév egy másik fájlban való újrafelhasználását.
Statikus függvények meghatározása in C++
Syntax:
static int myfunc(void) { cout("Example of C++ static function "); }
A fenti példában egy myfunc nevű statikus függvényt definiálunk. Figyeljük meg a statikus kulcsszó használatát a definícióban. A kulcsszó a függvény neve elé kerül.
Statikus tag funkció be C++
Amikor egy függvénytagot statikusnak deklarálunk, függetlenné válik az osztály többi objektumától. A statikus tagfüggvényeket akkor is meghívhatja, ha nem létezik más osztályobjektum.
Az osztálynevek eléréséhez használja az osztály nevét és a hatókör-feloldó operátort (::)
. Egy statikus függvény csak más statikus függvényekhez, statikus adattagokhoz és az osztályon kívüli egyéb funkciókhoz férhet hozzá. A statikus tagfüggvények hatóköre az osztályon belül van, és nem férhetnek hozzá ehhez az osztálymutatóhoz.
Példa 1
#include<iostream> using namespace std; class BoxClass { public: static int count; BoxClass(double l = 2.0, double b = 2.0, double h = 2.0) { cout << "Class constructor called." << endl; length = l; breadth = b; height = h; count++; } double getVolume() { return length * breadth * height; } static int getCount() { return count; } private: double length; double breadth; double height; }; int BoxClass::count = 0; int main(void) { cout << "Inital value of count is : " << BoxClass::getCount() << endl; BoxClass Box1(3.2, 1.4, 1.8); BoxClass Box2(7.5, 4.0, 4.0); cout << "Final value of count is : " << BoxClass::getCount() << endl; return 0; }
output:
Itt van egy képernyőkép a kódról:
Kód magyarázata:
- Beleértve az iostream fejlécfájlt a mi C++ program használatához funkciók.
- Szerelje be az std névteret a kódba, hogy az osztályait hívás nélkül használja.
- Hozzon létre egy osztályt nevű BoxOsztály.
- Használja a nyilvános hozzáférés módosítót egy nyilvánosan elérhető osztálytag megjelölésére.
- A count nevű statikus osztálytag deklarálása.
- Használjon osztálykonstruktort három kettős típusú változó inicializálására.
- Nyomtasson szöveget a konzolra. Az endl (end line) függvény az egérkurzort a következő sorba mozgatja.
- Inicializálja l értékét változó hosszúságúra.
- Inicializálja b értékét változó szélességre.
- Inicializálja a h értékét változó magasságra.
- Ezután minden új objektum létrehozásakor növelje a count változó értékét 1-gyel.
- A kivitelező test vége.
- Hozzon létre egy doublevolume() nevű függvényt.
- Határozza meg, mit adjon vissza a doubleVolume() függvény. A hosszúság, szélesség és magasság változók szorzatát kell visszaadnia.
- A doubleVolume() függvénytörzs vége.
- Deklaráljon egy statikus függvényt, melynek neve getCount().
- A getCount() függvénynek vissza kell adnia a count változó értékét.
- A getCount() függvény törzsének vége.
- A privát hozzáférés módosító segítségével jelölje meg egy osztálytagot nyilvánosan elérhetőként.
- Kettős adattípus hosszának nevezett osztálytag deklarálása. Ez privát módon lesz elérhető.
- Deklaráljon egy másik osztálytagot, melynek neve szélessége kettős adattípusnak. Ez privát módon lesz elérhető.
- Dupla adattípus magassága nevű osztálytag deklarálása. Ez privát módon lesz elérhető.
- A test vége a BoxOsztály osztály.
- Ezután inicializálja a statikus tagot BoxOsztály osztály.
- A main() függvény meghívása. A C++ programlogikát kell hozzáadni a függvény törzséhez.
- Nyomtasson ki szöveget a konzolra az objektumok aktuális számáról, mielőtt új objektumokat hozna létre.
- Deklaráljon egy nevű objektumot Box1, amely az osztály egyik példánya BoxOsztály. A szélesség, hosszúság és magasság értékeket zárójelben kell megadni.
- Deklaráljon egy nevű objektumot Box2, amely az osztály egy példánya BoxOsztály. A szélesség, hosszúság és magasság értékek a zárójelben vannak megadva.
- Nyomtasson ki egy szöveget a konzolra az objektumok aktuális számáról az új objektumok létrehozása után.
- A C++ program értéket kell visszaadnia a sikeres befejezés után.
- A main() függvény törzsének vége.
Statikus funkciók elérése
A statikus függvény eléréséhez nem kell osztályobjektumot létrehoznia. Ehelyett használhatja az osztály nevét és a hatókör felbontási operátorát (::)
.
Syntax:
className::funcName
Fent a className annak az osztálynak a neve, ahol a statikus függvény definiálva van. A funcName a statikus függvényhez rendelt név.
Példa 2
#include<iostream> using namespace std; class MyClass { public: static void msgFunc() { cout << "Welcome to Guru99!"; } }; int main() { MyClass::msgFunc(); }
output:
Itt van egy képernyőkép a kódról:
Kód magyarázata:
- Az iostream fejlécfájl beillesztése a programunkba a funkcióinak használatához.
- Szerelje be az std névteret a kódjába, hogy az osztályait hívás nélkül használhassa.
- Hozzon létre egy osztályt MyClass néven.
- A nyilvános hozzáférés módosító segítségével jelölje meg egy osztálytagot nyilvánosan elérhetőként.
- Egy msgFunc() nevű statikus függvény deklarálása. A static kulcsszó statikussá teszi a függvényt.
- Adja meg a konzolon kinyomtatni kívánt szöveget a fenti függvény meghívása/meghívása után.
- Az msgFunc() függvény törzsének vége.
- Fejezd be az osztály törzsét.
- A main() függvény meghívása.
- Hívja meg az msgFunc() nevű statikus függvényt.
- A main() függvény törzsének vége.
Statikus változók elérése
A statikus változók egy osztályhoz tartoznak, nem pedig az osztályobjektumokhoz. Ha egy statikus változó nyilvános, akkor az osztálynévvel és a hatókör felbontási operátorával érhető el. Ez azonban nem lehetséges, ha egy statikus tag privát.
Általában a privát változókhoz nyilvános függvényekkel lehet hozzáférni. Azonban létre kell hozni egy osztálypéldányt/objektumot. A megoldás egy statikus függvény használata.
3. példa: Statikus változó in C++ osztály
#include<iostream> using namespace std; class AClass { private: static int myvar; public: static int getVar() { return myvar; } }; int AClass::myvar = 23; int main() { cout <<"The value of myvar is: "<< AClass::getVar() << '\n'; }
output:
Itt van egy képernyőkép a kódról:
Kód magyarázata:
- Beleértve az iostream fejlécfájlt a programunkba.
- Szerelje be az std névteret ebben a programban, hogy hívás nélkül használja az osztályait.
- Hozzon létre egy AClass nevű osztályt.
- Használja a privát hozzáférés módosítót, hogy a myvar változót privát módon elérhetővé tegye.
- Hozzon létre egy myvar nevű statikus egész változót.
- Használja a nyilvános hozzáférés módosítót, amely nyilvánosan elérhetőként jelöli meg a getVar() függvényt.
- GetVar() nevű statikus függvény létrehozása.
- A getVar() függvénynek képesnek kell lennie a myvar változó értékének visszaadására.
- A getVar() függvény törzsének vége.
- Az AClass osztály törzsének vége.
- A myvar változóhoz 23 értéket rendeljünk. Ehhez az osztálynevet és a hatókör felbontási operátort használtuk.
- A main() függvény meghívása.
- Nyomtassa ki a myVar változó értékét a konzolon a többi szöveg mellé. Az osztálynevet, a statikus függvényt és a hatókör felbontási operátorát használtuk a változó értékének eléréséhez.
- A main() függvénytörzs vége.
ezt a mutatót a statikus függvényekben
Statikus függvény nincs objektumhoz kötve. Ez az oka annak, hogy a statikus függvények nem rendelkeznek ezzel a mutatóval. Egy objektum mutatója általában arra az objektumra mutat, amelyen éppen dolgozik. Mivel a statikus függvények nem működnek objektumokkal, nincs szükség erre a mutatóra.
A statikus funkciók közvetlen hozzáféréssel rendelkeznek a többi statikus taghoz. Ez azonban nem így van a nem statikus tagoknál. Ennek az az oka, hogy a nem statikus tagoknak egy objektumhoz kell tartozniuk, de a statikus függvényeknek nincsenek objektumai, amelyekkel dolgozni kellene.
Példa 4
Lehetőség van statikus függvény definiálására az osztálydeklaráción kívül. Mutassuk meg ezt:
#include<iostream> using namespace std; class NumGenerator { private: static int nextNum; public: static int getNextNum(); }; int NumGenerator::nextNum = 1; int NumGenerator::getNextNum() { return nextNum++; } int main() { for (int count = 0; count < 5; ++count) std::cout << "The next number is: " << NumGenerator::getNextNum() << '\n'; return 0; }
output:
Íme egy képernyőkép a kódodról:
Kód magyarázata:
- Az iostream fejlécfájl belefoglalása a kódunkba a funkcióinak használatához.
- Szerelje be az std névteret a kódunkba, hogy az osztályait hívás nélkül használhassa.
- Hozzon létre egy osztályt Num névenGenerator.
- A privát hozzáférés módosító segítségével a változó megjelölésére készülünk, hogy privátként hozzáférhetőként hozzuk létre.
- Hozzon létre egy nextNum nevű statikus egész változót.
- A nyilvános hozzáférés módosító használata, amely segít megjelölni a létrehozandó változót nyilvánosan hozzáférhetőként.
- A getNextNum() nevű statikus függvény deklarálása.
- Az osztálytörzs vége.
- A nextNum változóhoz rendeljen 1 értéket. Ezt az osztálynév, a változónév és a hatókör-feloldó operátor használatával tettük meg.
- A getNextNum() statikus függvény meghatározása az osztályon kívül.
- Adja meg a műveletet, amelyet a fenti függvény meghívásakor/meghívásakor kell végrehajtani. A nextNum változó értékét 1-gyel növeli.
- A getNextNum() függvény definíciójának vége.
- A main() függvény meghívása. A C++ programlogikát kell hozzáadni ennek a függvénynek a törzsébe.
- Használat hurokhoz count nevű változó létrehozásához. Ennek a változónak 0-ról 4-re kell növekednie. Minden iteráció után a változó értéke 1-gyel nő.
- A nextNum változó értékének kinyomtatása a konzolon lévő többi szöveg mellett minden iterációnál. Az érték a getNextNum() függvény segítségével érhető el.
- Ezt C++ a programnak értéket kell visszaadnia a sikeres befejezés után.
- A main() függvény vége.
Összegzésként
- C++ A statikus tagok olyan osztálytagok, amelyek az osztályhoz tartoznak, nem pedig objektumai.
- Egy statikus tagból csak egy példánya lesz, függetlenül a létrehozott objektumok számától.
- Minden osztályobjektum megosztja az egyes statikus osztálytagokat.
- Miután egy osztályfüggvényt statikusként határoztunk meg, függetlenné válik az osztályobjektumoktól.
- A statikus függvény akkor is elérhető, ha nem hoz létre osztályobjektumot.
- A statikus függvények azonban nem rendelkeznek ezzel az objektummal, amely osztályobjektumokra mutat.