Statička funkcija člana u C++ (Primjeri)

U čemu je statička funkcija C++?

In C++ klase, statički član je član klase koji pripada klasi, a ne njezinim objektima. Imat ćete samo jedan primjerak članstva. Ovo je slučaj bez obzira na broj objekata koje stvorite.

Kada je funkcija klase definirana kao statična, svi objekti klase dijele statički član klase. Statičkoj funkciji se stoga može pristupiti bez stvaranja ikakvih objekata klase i ona postaje neovisna o objekti klase. Statički podatkovni član u C++ može pristupiti drugim statičkim funkcijama, samo izvan klase.

Zašto koristiti statičke funkcije?

Za razliku od C++ globalne funkcije, statičke funkcije dostupne su samo iz datoteke deklaracije. Ako postoji potreba za ograničavanjem pristupa funkciji, učinite je statičnom.

Koristite statičku funkciju da ograničite ponovnu upotrebu istog naziva funkcije u drugoj datoteci.

Definiranje statičkih funkcija u C++

Sintaksa:

static int myfunc(void)
{
    cout("Example of C++ static function ");
}

U gornjem primjeru definiramo statičku funkciju pod nazivom myfunc. Primijetite korištenje ključne riječi static u definiciji. Ključna riječ dolazi prije naziva funkcije.

Statička funkcija člana u C++

Kada se funkcijski član proglasi statičnim, on postaje neovisan o drugim objektima u klasi. Možete pozvati statičku funkciju člana čak i ako ne postoje drugi objekti klase.

Da biste pristupili nazivima klasa, trebali biste koristiti naziv klase i operator rezolucije opsega (::). Statička funkcija može pristupiti samo drugim statičkim funkcijama, statičkim podacima i drugim funkcijama izvan klase. Opseg statičkih funkcija članova nalazi se unutar klase i one ne mogu pristupiti ovom pokazivaču klase.

Primjer 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;
}

Izlaz:

Statička funkcija člana

Evo snimke zaslona koda:

Statička funkcija člana

Objašnjenje koda:

  1. Uključujući iostream datoteku zaglavlja u naš C++ program za korištenje Funkcije.
  2. Uključite prostor imena std u kod da biste koristili njegove klase bez pozivanja.
  3. Stvorite klasu pod nazivom BoxKlasa.
  4. Koristite modifikator javnog pristupa da označite člana klase koji je javno dostupan.
  5. Deklarira statički član klase pod nazivom count.
  6. Upotrijebite konstruktor klase za inicijalizaciju triju varijabli dvostrukog tipa.
  7. Ispišite tekst na konzoli. Funkcija endl (završni redak) pomiče kursor miša u sljedeći redak.
  8. Inicijalizirajte vrijednost l na varijabilnu duljinu.
  9. Inicijalizirajte vrijednost b na varijablu širine.
  10. Inicijalizirajte vrijednost h na varijablu visine.
  11. Zatim povećajte vrijednost varijable count za 1 svaki put kada se stvori novi objekt.
  12. Kraj tijela konstruktora.
  13. Napravite funkciju pod nazivom doublevolume().
  14. Definirajte što će funkcija doubleVolume() vratiti. Trebao bi vratiti množenje varijabli duljine, širine i visine.
  15. Kraj tijela funkcije doubleVolume().
  16. Deklarirajte statičku funkciju pod nazivom getCount().
  17. Funkcija getCount() trebala bi vratiti vrijednost varijable count.
  18. Kraj tijela funkcije getCount().
  19. Koristite modifikator privatnog pristupa da označite člana razreda kao javno dostupnog.
  20. Deklaracija člana klase imenovanog length dvostrukog tipa podataka. Bit će privatno dostupan.
  21. Deklarirajte drugog člana klase pod nazivom širina dvostrukog tipa podataka. Bit će privatno dostupan.
  22. Deklaracija člana klase pod nazivom visina dvostrukog podatkovnog tipa. Bit će privatno dostupan.
  23. Kraj tijela Boxrazred klasa.
  24. Zatim inicijalizirajte statički član Boxrazred klasa.
  25. Pozivanje funkcije main(). The C++ programsku logiku treba dodati unutar tijela te funkcije.
  26. Ispišite tekst na konzoli koji navodi trenutni broj objekata prije nego što se kreiraju novi objekti.
  27. Deklarirajte objekt s imenom Box1, koja je jedna od instanci klase BoxKlasa. Vrijednosti širine, duljine i visine trebaju biti navedene unutar zagrada.
  28. Deklarirajte objekt s imenom Box2, koji je instanca klase BoxKlasa. Vrijednosti širine, duljine i visine navedene su unutar zagrada.
  29. Ispišite tekst na konzoli koji navodi trenutni broj objekata nakon stvaranja novih objekata.
  30. The C++ program mora vratiti vrijednost nakon uspješnog završetka.
  31. Kraj tijela funkcije main().

Pristup statičkim funkcijama

Ne morate stvoriti objekt klase da biste pristupili statičkoj funkciji. Umjesto toga, možete koristiti naziv klase i operator razlučivanja opsega (::).

Sintaksa:

className::funcName

Iznad, className je naziv klase u kojoj je definirana statička funkcija. FuncName je naziv dodijeljen statičkoj funkciji.

Primjer 2

#include<iostream> 
using namespace std;
class MyClass {
public:
	static void msgFunc() {
		cout << "Welcome to Guru99!";
	}
};
int main() {
	MyClass::msgFunc();
}

Izlaz:

Pristup statičkim funkcijama

Evo snimke zaslona koda:

Pristup statičkim funkcijama

Objašnjenje koda:

  1. Uključivanje datoteke zaglavlja iostream u naš program za korištenje njegovih funkcija.
  2. Uključite prostor imena std u svoj kod da biste koristili njegove klase bez pozivanja.
  3. Napravite klasu pod nazivom MyClass.
  4. Koristite modifikator javnog pristupa da označite člana razreda kao javno dostupnog.
  5. Deklaracija statičke funkcije pod nazivom msgFunc(). Ključna riječ static čini funkciju statičnom.
  6. Odredite tekst koji će se ispisati na konzoli kada se gornja funkcija pozove/pozove.
  7. Kraj tijela funkcije msgFunc().
  8. Završite tijelo klase.
  9. Pozivanje funkcije main().
  10. Pozovite statičku funkciju pod nazivom msgFunc().
  11. Kraj tijela funkcije main().

Pristup statičkim varijablama

Statičke varijable pripadaju klasi, a ne objektima klase. Ako je statička varijabla javna, dostupna joj je pomoću naziva klase i pomoću operatora rezolucije opsega. Međutim, to nije moguće ako je statički član privatan.

Obično se privatnim varijablama pristupa pomoću javnih funkcija. Međutim, instanca/objekt klase mora biti kreirana. Rješenje je korištenje statičke funkcije.

Primjer 3: Statička varijabla u C++ razred

#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';
}

Izlaz:

Pristup statičkim varijablama

Evo snimke zaslona koda:

Pristup statičkim varijablama

Objašnjenje koda:

  1. Uključivanje iostream datoteke zaglavlja u naš program.
  2. Uključite prostor imena std u ovaj program da biste koristili njegove klase bez pozivanja.
  3. Napravite klasu pod nazivom AClass.
  4. Koristite modifikator privatnog pristupa kako biste varijablu myvar učinili privatno dostupnom.
  5. Napravite statičku varijablu cijelog broja pod nazivom myvar.
  6. Koristite modifikator javnog pristupa koji označava funkciju getVar() kao javno dostupnu.
  7. Stvaranje statičke funkcije pod nazivom getVar().
  8. Funkcija getVar() trebala bi moći vratiti vrijednost varijable myvar.
  9. Kraj tijela funkcije getVar().
  10. Kraj tijela klase AClass.
  11. Dodijelite varijabli myvar vrijednost 23. Za ovo smo upotrijebili naziv klase i operator rezolucije opsega.
  12. Pozivanje funkcije main().
  13. Ispišite vrijednost varijable myVar na konzoli uz ostali tekst. Za pristup vrijednosti ove varijable upotrijebili smo naziv klase, statičku funkciju i operator rezolucije opsega.
  14. Kraj tijela funkcije main().

ovaj pokazivač u statičkim funkcijama

Statička funkcija nije pridružena objektu. Zato statičke funkcije nemaju ovaj pokazivač. Pokazivač objekta obično pokazuje na objekt na kojem trenutno radi. Budući da statičke funkcije ne rade s objektima, nema potrebe za ovim pokazivačem.

Statičke funkcije imaju izravan pristup drugim statičkim članovima. Međutim, to nije slučaj s nestatičnim članovima. Razlog je taj što nestatički članovi moraju pripadati objektu, ali statičke funkcije nemaju objekte s kojima rade.

Primjer 4

Moguće je definirati statičku funkciju izvan deklaracije klase. Pokažimo ovo:

#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;
}

Izlaz:

ovaj pokazivač u statičkim funkcijama

Evo snimke zaslona vašeg koda:

ovaj pokazivač u statičkim funkcijama

Objašnjenje koda:

  1. Uključivanje iostream datoteke zaglavlja u naš kod za korištenje njegovih funkcija.
  2. Uključite prostor imena std u naš kod da biste koristili njegove klase bez pozivanja.
  3. Napravite klasu pod nazivom NumGenerator.
  4. Koristeći modifikator privatnog pristupa za označavanje varijable koju ćemo stvoriti kao privatno dostupnu.
  5. Napravite statičku varijablu cijelog broja pod nazivom nextNum.
  6. Korištenje modifikatora javnog pristupa koji vam pomaže označiti varijablu koju ćemo stvoriti kao javno dostupnu.
  7. Deklaracija statičke funkcije pod nazivom getNextNum().
  8. Kraj tijela razreda.
  9. Dodijelite varijabli nextNum vrijednost 1. To smo učinili pomoću naziva klase, naziva varijable i operatora razlučivanja opsega.
  10. Definiranje statičke funkcije getNextNum() izvan klase.
  11. Odredite akciju koja će se poduzeti kada se gore navedena funkcija pozove. Povećat će vrijednost varijable nextNum za 1.
  12. Kraj definicije funkcije getNextNum().
  13. Pozivanje funkcije main(). The C++ programsku logiku treba dodati unutar tijela ove funkcije.
  14. Koristiti za petlju za stvaranje varijable pod nazivom count. Vrijednost ove varijable trebala bi se povećati od 0 do 4. Nakon svake iteracije, vrijednost varijable će se povećati za 1.
  15. Ispis vrijednosti varijable nextNum uz ostali tekst na konzoli pri svakoj iteraciji. Vrijednosti se pristupa pomoću funkcije getNextNum().
  16. Ova C++ program mora vratiti vrijednost nakon uspješnog završetka.
  17. Kraj funkcije main().

Rezime

  • C++ statički članovi su članovi klase koji pripadaju klasi, a ne njezinim objektima.
  • Imat ćete samo jednu kopiju statičkog člana bez obzira na broj objekata koje stvorite.
  • Svi objekti klase dijele svakog člana statičke klase.
  • Nakon definiranja funkcije klase kao statične, ona postaje neovisna o objektima klase.
  • Statičkoj funkciji se može pristupiti čak i ako ne stvorite objekt klase.
  • Međutim, statičke funkcije nemaju ovaj objekt, koji ukazuje na objekte klase.