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:
Her er et skjermbilde av koden:
Kodeforklaring:
- Inkludert iostream header-filen i vår C++ program for å bruke det funksjoner.
- Inkluder std-navneområdet i koden for å bruke klassene uten å kalle det.
- Lag en klasse som heter BoxKlasse.
- Bruk modifikatoren for offentlig tilgang til å merke et klassemedlem som er offentlig tilgjengelig.
- Den erklærer et statisk klassemedlem ved navn telle.
- Bruk en klassekonstruktor for å initialisere tre variabler av dobbel type.
- Skriv ut litt tekst på konsollen. Endl-funksjonen (sluttlinje) flytter musepekeren til neste linje.
- Initialiser verdien av l til variabel lengde.
- Initialiser verdien av b til variabel bredde.
- Initialiser verdien av h til variabel høyde.
- Øk deretter verdien av variabelantallet med 1 hver gang et nytt objekt opprettes.
- Slutten av konstruktørkroppen.
- Lag en funksjon kalt doublevolume().
- Definer hva doubleVolume()-funksjonen skal returnere. Den skal returnere multiplikasjonen av lengde-, bredde- og høydevariabler.
- Slutten av dobbelVolume()-funksjonskroppen.
- Erklær en statisk funksjon kalt getCount().
- GetCount()-funksjonen skal returnere verdien til count-variabelen.
- Slutten av brødteksten til getCount()-funksjonen.
- Bruk modifikatoren for privat tilgang til å merke et klassemedlem som offentlig tilgjengelig.
- Erklære et klassemedlem kalt lengde av en dobbel datatype. Det vil være privat tilgjengelig.
- Erklær et annet klassemedlem kalt bredden av en dobbel datatype. Det vil være privat tilgjengelig.
- Erklære et klassemedlem kalt høyde av dobbel datatype. Det vil være privat tilgjengelig.
- Slutten av kroppen til BoxKlasseklasse.
- Initialiser deretter et statisk medlem av BoxKlasseklasse.
- Kaller opp hoved()-funksjonen. De C++ programlogikk bør legges til i hoveddelen av denne funksjonen.
- Skriv ut litt tekst på konsollen med gjeldende antall objekter før nye objekter opprettes.
- 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.
- Erklær et objekt navngitt Box2, som er en forekomst av klassen BoxKlasse. Verdiene for bredde, lengde og høyde er spesifisert i parentesen.
- Skriv ut litt tekst på konsollen med gjeldende antall objekter etter opprettelsen av nye objekter.
- Ocuco C++ program må returnere verdi ved vellykket gjennomføring.
- 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:
Her er et skjermbilde av koden:
Kodeforklaring:
- Inkluderer iostream header-filen i programmet vårt for å bruke funksjonene.
- Inkluder std-navneområdet i koden din for å bruke klassene uten å kalle det.
- Lag en klasse som heter MyClass.
- Bruk modifikatoren for offentlig tilgang til å merke et klassemedlem som offentlig tilgjengelig.
- Erklære en statisk funksjon kalt msgFunc(). Det statiske nøkkelordet gjør funksjonen statisk.
- Spesifiser teksten som skal skrives ut på konsollen når funksjonen ovenfor kalles/påkalles.
- Slutten av brødteksten til msgFunc()-funksjonen.
- Avslutt klassekroppen.
- Kaller opp hoved()-funksjonen.
- Kall den statiske funksjonen kalt msgFunc().
- 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:
Her er et skjermbilde av koden:
Kodeforklaring:
- Inkludert iostream header-filen i programmet vårt.
- Inkluder std-navneområdet i dette programmet for å bruke klassene uten å ringe.
- Opprett en klasse som heter AClass.
- Bruk modifikatoren for privat tilgang for å gjøre variabelen myvar privat tilgjengelig.
- Lag en statisk heltallsvariabel kalt myvar.
- Bruk modifikatoren for offentlig tilgang som markerer funksjonen getVar() som offentlig tilgjengelig.
- Opprette en statisk funksjon kalt getVar().
- GetVar()-funksjonen skal kunne returnere verdien av variabelen myvar.
- Slutten av kroppen til funksjonen getVar().
- Slutten av kroppen til klassen AKlasse.
- Tilordne variabelen myvar en verdi på 23. Vi har brukt klassenavnet og scope-oppløsningsoperatoren til dette.
- Kaller opp hoved()-funksjonen.
- 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.
- 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:
Her er et skjermbilde av koden din:
Kodeforklaring:
- Inkluderer iostream-headerfilen i koden vår for å bruke funksjonene.
- Inkluder std-navneområdet i koden vår for å bruke klassene uten å kalle det.
- Lag en klasse som heter NumGenerator.
- Ved å bruke modifikatoren for privat tilgang for å markere variabelen, er vi i ferd med å opprette som privat tilgjengelig.
- Lag en statisk heltallsvariabel kalt nextNum.
- Ved å bruke modifikatoren for offentlig tilgang som hjelper deg å merke variabelen vi er i ferd med å lage som offentlig tilgjengelig.
- Erklære en statisk funksjon kalt getNextNum().
- Slutten av klassekroppen.
- Tilordne variabelen nextNum en verdi på 1. Vi har gjort dette ved å bruke klassenavnet, variabelnavnet og scope-oppløsningsoperatoren.
- Definere den statiske funksjonen getNextNum() utenfor klassen.
- Spesifiser handlingen som skal utføres når funksjonen ovenfor kalles/påkalles. Det vil øke verdien av variabelen nextNum med 1.
- Slutten av definisjonen av funksjonen getNextNum().
- Kaller opp hoved()-funksjonen. De C++ programlogikk bør legges til i hoveddelen av denne funksjonen.
- 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.
- 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.
- Dette C++ programmet må returnere verdi ved vellykket gjennomføring.
- 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.