Statisk medlemsfunksjon i C++ (Eksempler)

Hva er en statisk funksjon i C++?

In C++ klasser, er et statisk medlem et klassemedlem som tilhรธrer klassen i stedet for dens objekter. Du vil kun ha รฉn kopi av medlemskapet. Dette er tilfellet uavhengig av antall objekter du oppretter.

Nรฅr en klassefunksjon er definert som statisk, deler alle klasseobjekter et statisk klassemedlem. Den statiske funksjonen kan derfor nรฅs uten รฅ lage noen klasseobjekter og blir uavhengig av klasseobjekter. Et statisk datamedlem i C++ kan fรฅ tilgang til andre statiske funksjoner, kun utenfor klassen.

Hvorfor bruke statiske funksjoner?

I motsetning til C++ globale funksjoner, statiske funksjoner er kun tilgjengelige fra deklarasjonsfilen. Hvis det er behov for รฅ begrense tilgangen til en funksjon, gjรธr den statisk.

Bruk en statisk funksjon for รฅ begrense gjenbruk av samme funksjonsnavn i en annen fil.

Definere statiske funksjoner i C++

Syntaks:

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

I eksemplet ovenfor definerer vi en statisk funksjon kalt myfunc. Legg merke til bruken av det statiske nรธkkelordet i definisjonen. Nรธkkelordet kommer fรธr funksjonsnavnet.

Statisk medlemsfunksjon i C++

Nรฅr et funksjonsmedlem erklรฆres statisk, blir det uavhengig av andre objekter i klassen. Du kan kalle en statisk medlemsfunksjon selv om det ikke finnes andre klasseobjekter.

For รฅ fรฅ tilgang til klassenavn, bรธr du bruke navnet pรฅ klassen og omfangsopplรธsningsoperatรธren (::). En statisk funksjon kan bare fรฅ tilgang til andre statiske funksjoner, statiske datamedlemmer og andre funksjoner utenfor klassen. Omfanget av statiske medlemsfunksjoner ligger innenfor klassen, og de kan ikke fรฅ tilgang til denne klassepekeren.

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

Utgang:

Statisk medlemsfunksjon

Her er et skjermbilde av koden:

Statisk medlemsfunksjon

Kodeforklaring:

  1. Inkludert iostream header-filen i vรฅr C++ program for รฅ bruke det funksjoner.
  2. Inkluder std-navneomrรฅdet i koden for รฅ bruke klassene uten รฅ kalle det.
  3. Lag en klasse som heter BoxKlasse.
  4. Bruk modifikatoren for offentlig tilgang til รฅ merke et klassemedlem som er offentlig tilgjengelig.
  5. Den erklรฆrer et statisk klassemedlem ved navn telle.
  6. Bruk en klassekonstruktor for รฅ initialisere tre variabler av dobbel type.
  7. Skriv ut litt tekst pรฅ konsollen. Endl-funksjonen (sluttlinje) flytter musepekeren til neste linje.
  8. Initialiser verdien av l til variabel lengde.
  9. Initialiser verdien av b til variabel bredde.
  10. Initialiser verdien av h til variabel hรธyde.
  11. ร˜k deretter verdien av variabelantallet med 1 hver gang et nytt objekt opprettes.
  12. Slutten av konstruktรธrkroppen.
  13. Lag en funksjon kalt doublevolume().
  14. Definer hva doubleVolume()-funksjonen skal returnere. Den skal returnere multiplikasjonen av lengde-, bredde- og hรธydevariabler.
  15. Slutten av dobbelVolume()-funksjonskroppen.
  16. Erklรฆr en statisk funksjon kalt getCount().
  17. GetCount()-funksjonen skal returnere verdien til count-variabelen.
  18. Slutten av brรธdteksten til getCount()-funksjonen.
  19. Bruk modifikatoren for privat tilgang til รฅ merke et klassemedlem som offentlig tilgjengelig.
  20. Erklรฆre et klassemedlem kalt lengde av en dobbel datatype. Det vil vรฆre privat tilgjengelig.
  21. Erklรฆr et annet klassemedlem kalt bredden av en dobbel datatype. Det vil vรฆre privat tilgjengelig.
  22. Erklรฆre et klassemedlem kalt hรธyde av dobbel datatype. Det vil vรฆre privat tilgjengelig.
  23. Slutten av kroppen til BoxKlasseklasse.
  24. Initialiser deretter et statisk medlem av BoxKlasseklasse.
  25. Kaller opp hoved()-funksjonen. De C++ programlogikk bรธr legges til i hoveddelen av denne funksjonen.
  26. Skriv ut litt tekst pรฅ konsollen med gjeldende antall objekter fรธr nye objekter opprettes.
  27. Erklรฆr et objekt navngitt Box1, som er en av forekomstene av klassen BoxKlasse. Verdiene for bredde, lengde og hรธyde skal angis i parentesen.
  28. Erklรฆr et objekt navngitt Box2, som er en forekomst av klassen BoxKlasse. Verdiene for bredde, lengde og hรธyde er spesifisert i parentesen.
  29. Skriv ut litt tekst pรฅ konsollen med gjeldende antall objekter etter opprettelsen av nye objekter.
  30. Ocuco C++ program mรฅ returnere verdi ved vellykket gjennomfรธring.
  31. Slutten av hoveddelen av funksjonen main().

Fรฅ tilgang til statiske funksjoner

Du trenger ikke opprette et klasseobjekt for รฅ fรฅ tilgang til en statisk funksjon. I stedet kan du bruke operatรธren for klassenavn og omfangsopplรธsning (::).

Syntaks:

className::funcName

Ovenfor er className navnet pรฅ klassen der den statiske funksjonen er definert. FuncName er navnet som er tildelt den statiske funksjonen.

Eksempel 2

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

Utgang:

Fรฅ tilgang til statiske funksjoner

Her er et skjermbilde av koden:

Fรฅ tilgang til statiske funksjoner

Kodeforklaring:

  1. Inkluderer iostream header-filen i programmet vรฅrt for รฅ bruke funksjonene.
  2. Inkluder std-navneomrรฅdet i koden din for รฅ bruke klassene uten รฅ kalle det.
  3. Lag en klasse som heter MyClass.
  4. Bruk modifikatoren for offentlig tilgang til รฅ merke et klassemedlem som offentlig tilgjengelig.
  5. Erklรฆre en statisk funksjon kalt msgFunc(). Det statiske nรธkkelordet gjรธr funksjonen statisk.
  6. Spesifiser teksten som skal skrives ut pรฅ konsollen nรฅr funksjonen ovenfor kalles/pรฅkalles.
  7. Slutten av brรธdteksten til msgFunc()-funksjonen.
  8. Avslutt klassekroppen.
  9. Kaller opp hoved()-funksjonen.
  10. Kall den statiske funksjonen kalt msgFunc().
  11. Slutten av hoveddelen av funksjonen main().

Fรฅ tilgang til statiske variabler

Statiske variabler tilhรธrer en klasse i stedet for klasseobjekter. Hvis en statisk variabel er offentlig, er den tilgjengelig ved รฅ bruke klassenavnet og ved รฅ bruke scope resolution-operatoren. Dette er imidlertid ikke mulig hvis et statisk medlem er privat.

Vanligvis รฅpnes private variabler ved hjelp av offentlige funksjoner. En klasseinstans/objekt mรฅ imidlertid opprettes. Lรธsningen er รฅ bruke en statisk funksjon.

Eksempel 3: Statisk variabel i C++ klasse

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

Utgang:

Fรฅ tilgang til statiske variabler

Her er et skjermbilde av koden:

Fรฅ tilgang til statiske variabler

Kodeforklaring:

  1. Inkludert iostream header-filen i programmet vรฅrt.
  2. Inkluder std-navneomrรฅdet i dette programmet for รฅ bruke klassene uten รฅ ringe.
  3. Opprett en klasse som heter AClass.
  4. Bruk modifikatoren for privat tilgang for รฅ gjรธre variabelen myvar privat tilgjengelig.
  5. Lag en statisk heltallsvariabel kalt myvar.
  6. Bruk modifikatoren for offentlig tilgang som markerer funksjonen getVar() som offentlig tilgjengelig.
  7. Opprette en statisk funksjon kalt getVar().
  8. GetVar()-funksjonen skal kunne returnere verdien av variabelen myvar.
  9. Slutten av kroppen til funksjonen getVar().
  10. Slutten av kroppen til klassen AKlasse.
  11. Tilordne variabelen myvar en verdi pรฅ 23. Vi har brukt klassenavnet og scope-opplรธsningsoperatoren til dette.
  12. Kaller opp hoved()-funksjonen.
  13. Skriv ut verdien av variabel myVar pรฅ konsollen sammen med annen tekst. Vi har brukt klassenavnet, den statiske funksjonen og scope resolution-operatoren for รฅ fรฅ tilgang til denne variabelens verdi.
  14. Slutten av hoved()-funksjonskroppen.

denne pekeren i statiske funksjoner

En statisk funksjon er ikke knyttet til et objekt. Det er derfor statiske funksjoner ikke har denne pekeren. Et objekts peker peker vanligvis til objektet det jobber med. Siden statiske funksjoner ikke fungerer med objekter, er det ikke behov for denne pekeren.

Statiske funksjoner har direkte tilgang til andre statiske medlemmer. Dette er imidlertid ikke tilfelle med ikke-statiske medlemmer. ร…rsaken er at ikke-statiske medlemmer mรฅ tilhรธre et objekt, men statiske funksjoner har ikke objekter รฅ jobbe med.

Eksempel 4

Det er mulig รฅ definere en statisk funksjon utenfor klasseerklรฆringen. La oss demonstrere dette:

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

Utgang:

denne pekeren i statiske funksjoner

Her er et skjermbilde av koden din:

denne pekeren i statiske funksjoner

Kodeforklaring:

  1. Inkluderer iostream-headerfilen i koden vรฅr for รฅ bruke funksjonene.
  2. Inkluder std-navneomrรฅdet i koden vรฅr for รฅ bruke klassene uten รฅ kalle det.
  3. Lag en klasse som heter NumGenerator.
  4. Ved รฅ bruke modifikatoren for privat tilgang for รฅ markere variabelen, er vi i ferd med รฅ opprette som privat tilgjengelig.
  5. Lag en statisk heltallsvariabel kalt nextNum.
  6. Ved รฅ bruke modifikatoren for offentlig tilgang som hjelper deg รฅ merke variabelen vi er i ferd med รฅ lage som offentlig tilgjengelig.
  7. Erklรฆre en statisk funksjon kalt getNextNum().
  8. Slutten av klassekroppen.
  9. Tilordne variabelen nextNum en verdi pรฅ 1. Vi har gjort dette ved รฅ bruke klassenavnet, variabelnavnet og scope-opplรธsningsoperatoren.
  10. Definere den statiske funksjonen getNextNum() utenfor klassen.
  11. Spesifiser handlingen som skal utfรธres nรฅr funksjonen ovenfor kalles/pรฅkalles. Det vil รธke verdien av variabelen nextNum med 1.
  12. Slutten av definisjonen av funksjonen getNextNum().
  13. Kaller opp hoved()-funksjonen. De C++ programlogikk bรธr legges til i hoveddelen av denne funksjonen.
  14. Bruk for slรธyfe for รฅ lage en variabel kalt count. Verdien til denne variabelen bรธr รธke fra 0 til 4. Etter hver iterasjon vil variabelens verdi รธke med 1.
  15. Skrive ut verdien av variabelen nextNum sammen med annen tekst pรฅ konsollen ved hver iterasjon. Du fรฅr tilgang til verdien ved รฅ bruke getNextNum()-funksjonen.
  16. Dette C++ programmet mรฅ returnere verdi ved vellykket gjennomfรธring.
  17. Slutten av hoved()-funksjonen.

Sammendrag

  • C++ statiske medlemmer er klassemedlemmer som tilhรธrer klassen i stedet for dens objekter.
  • Du vil bare ha รฉn kopi av et statisk medlem uavhengig av antall objekter du oppretter.
  • Alle klasseobjekter deler hvert statisk klassemedlem.
  • Etter รฅ ha definert en klassefunksjon som statisk, blir den uavhengig av klasseobjektene.
  • En statisk funksjon kan nรฅs selv om du ikke oppretter noe klasseobjekt.
  • Statiske funksjoner har imidlertid ikke dette objektet, som peker pรฅ klasseobjekter.

Oppsummer dette innlegget med: