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:

Statikus tagi funkció

Itt van egy képernyőkép a kódról:

Statikus tagi funkció

Kód magyarázata:

  1. Beleértve az iostream fejlécfájlt a mi C++ program használatához funkciók.
  2. Szerelje be az std névteret a kódba, hogy az osztályait hívás nélkül használja.
  3. Hozzon létre egy osztályt nevű BoxOsztály.
  4. Használja a nyilvános hozzáférés módosítót egy nyilvánosan elérhető osztálytag megjelölésére.
  5. A count nevű statikus osztálytag deklarálása.
  6. Használjon osztálykonstruktort három kettős típusú változó inicializálására.
  7. Nyomtasson szöveget a konzolra. Az endl (end line) függvény az egérkurzort a következő sorba mozgatja.
  8. Inicializálja l értékét változó hosszúságúra.
  9. Inicializálja b értékét változó szélességre.
  10. Inicializálja a h értékét változó magasságra.
  11. Ezután minden új objektum létrehozásakor növelje a count változó értékét 1-gyel.
  12. A kivitelező test vége.
  13. Hozzon létre egy doublevolume() nevű függvényt.
  14. 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.
  15. A doubleVolume() függvénytörzs vége.
  16. Deklaráljon egy statikus függvényt, melynek neve getCount().
  17. A getCount() függvénynek vissza kell adnia a count változó értékét.
  18. A getCount() függvény törzsének vége.
  19. 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.
  20. Kettős adattípus hosszának nevezett osztálytag deklarálása. Ez privát módon lesz elérhető.
  21. Deklaráljon egy másik osztálytagot, melynek neve szélessége kettős adattípusnak. Ez privát módon lesz elérhető.
  22. Dupla adattípus magassága nevű osztálytag deklarálása. Ez privát módon lesz elérhető.
  23. A test vége a BoxOsztály osztály.
  24. Ezután inicializálja a statikus tagot BoxOsztály osztály.
  25. A main() függvény meghívása. A C++ programlogikát kell hozzáadni a függvény törzséhez.
  26. Nyomtasson ki szöveget a konzolra az objektumok aktuális számáról, mielőtt új objektumokat hozna létre.
  27. 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.
  28. 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.
  29. Nyomtasson ki egy szöveget a konzolra az objektumok aktuális számáról az új objektumok létrehozása után.
  30. A C++ program értéket kell visszaadnia a sikeres befejezés után.
  31. 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:

Statikus funkciók elérése

Itt van egy képernyőkép a kódról:

Statikus funkciók elérése

Kód magyarázata:

  1. Az iostream fejlécfájl beillesztése a programunkba a funkcióinak használatához.
  2. Szerelje be az std névteret a kódjába, hogy az osztályait hívás nélkül használhassa.
  3. Hozzon létre egy osztályt MyClass néven.
  4. 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.
  5. Egy msgFunc() nevű statikus függvény deklarálása. A static kulcsszó statikussá teszi a függvényt.
  6. Adja meg a konzolon kinyomtatni kívánt szöveget a fenti függvény meghívása/meghívása után.
  7. Az msgFunc() függvény törzsének vége.
  8. Fejezd be az osztály törzsét.
  9. A main() függvény meghívása.
  10. Hívja meg az msgFunc() nevű statikus függvényt.
  11. 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:

Statikus változók elérése

Itt van egy képernyőkép a kódról:

Statikus változók elérése

Kód magyarázata:

  1. Beleértve az iostream fejlécfájlt a programunkba.
  2. Szerelje be az std névteret ebben a programban, hogy hívás nélkül használja az osztályait.
  3. Hozzon létre egy AClass nevű osztályt.
  4. 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.
  5. Hozzon létre egy myvar nevű statikus egész változót.
  6. 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.
  7. GetVar() nevű statikus függvény létrehozása.
  8. A getVar() függvénynek képesnek kell lennie a myvar változó értékének visszaadására.
  9. A getVar() függvény törzsének vége.
  10. Az AClass osztály törzsének vége.
  11. 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.
  12. A main() függvény meghívása.
  13. 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.
  14. 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:

ezt a mutatót a statikus függvényekben

Íme egy képernyőkép a kódodról:

ezt a mutatót a statikus függvényekben

Kód magyarázata:

  1. Az iostream fejlécfájl belefoglalása a kódunkba a funkcióinak használatához.
  2. Szerelje be az std névteret a kódunkba, hogy az osztályait hívás nélkül használhassa.
  3. Hozzon létre egy osztályt Num névenGenerator.
  4. 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.
  5. Hozzon létre egy nextNum nevű statikus egész változót.
  6. 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.
  7. A getNextNum() nevű statikus függvény deklarálása.
  8. Az osztálytörzs vége.
  9. 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.
  10. A getNextNum() statikus függvény meghatározása az osztályon kívül.
  11. 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.
  12. A getNextNum() függvény definíciójának vége.
  13. A main() függvény meghívása. A C++ programlogikát kell hozzáadni ennek a függvénynek a törzsébe.
  14. 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ő.
  15. 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.
  16. Ezt C++ a programnak értéket kell visszaadnia a sikeres befejezés után.
  17. 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.