Statisk medlemsfunktion i C++ (Eksempler)
Hvad er en statisk funktion i C++?
In C++ klasser, er et statisk medlem et klassemedlem, der tilhører klassen snarere end til dens objekter. Du vil kun have én kopi af medlemskabet. Dette er tilfældet uanset antallet af objekter, du opretter.
Når en klassefunktion er defineret som statisk, deler alle klasseobjekter et statisk klassemedlem. Den statiske funktion kan derfor tilgås uden at oprette nogen klasseobjekter og bliver uafhængig af klasseobjekter. Et statisk datamedlem i C++ kan få adgang til andre statiske funktioner, kun uden for klassen.
Hvorfor bruge statiske funktioner?
I modsætning til C++ globale funktioner, statiske funktioner er kun tilgængelige fra deklarationsfilen. Hvis der er behov for at begrænse adgangen til en funktion, så gør den statisk.
Brug en statisk funktion til at begrænse genbrugen af det samme funktionsnavn i en anden fil.
Definering af statiske funktioner i C++
Syntaks:
static int myfunc(void)
{
cout("Example of C++ static function ");
}
I ovenstående eksempel definerer vi en statisk funktion ved navn myfunc. Læg mærke til brugen af det statiske nøgleord i definitionen. Nøgleordet kommer før funktionsnavnet.
Statisk medlemsfunktion i C++
Når et funktionsmedlem erklæres statisk, bliver det uafhængigt af andre objekter i klassen. Du kan kalde en statisk medlemsfunktion, selvom der ikke findes andre klasseobjekter.
For at få adgang til klassenavne skal du bruge navnet på klassen og scope resolution operatoren (::). En statisk funktion kan kun få adgang til andre statiske funktioner, statiske datamedlemmer og andre funktioner uden for klassen. Omfanget af statiske medlemsfunktioner ligger inden for klassen, og de kan ikke få adgang til denne klassemarkør.
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;
}
Output:
Her er et skærmbillede af koden:
Kodeforklaring:
- Inklusive iostream header-filen i vores C++ program til at bruge det funktioner.
- Inkluder std-navneområdet i koden for at bruge dets klasser uden at kalde det.
- Opret en klasse med navnet BoxKlasse.
- Brug offentlig adgangsmodifikator til at markere et klassemedlem, som er offentligt tilgængeligt.
- Den erklærer et statisk klassemedlem ved navn tæller.
- Brug en klassekonstruktor til at initialisere tre variable af dobbelt type.
- Udskriv noget tekst på konsollen. Endl-funktionen (slutlinje) flytter musemarkøren til næste linje.
- Initialiser værdien af l til variabel længde.
- Initialiser værdien af b til variabel bredde.
- Initialiser værdien af h til variabel højde.
- Forøg derefter værdien af det variable antal med 1, hver gang et nyt objekt oprettes.
- Slut på konstruktørlegemet.
- Opret en funktion ved navn doublevolume().
- Definer, hvad doubleVolume()-funktionen skal returnere. Det skal returnere multiplikationen af længde-, bredde- og højdevariabler.
- Slutningen af doubleVolume() funktionsteksten.
- Erklær en statisk funktion ved navn getCount().
- GetCount()-funktionen skal returnere værdien af count-variablen.
- Slut på kroppen af getCount()-funktionen.
- Brug den private adgangsmodifikator til at markere et klassemedlem som offentligt tilgængeligt.
- Erklæring af et klassemedlem med navnet længde af en dobbelt datatype. Det vil være privat tilgængeligt.
- Erklære et andet klassemedlem ved navn bredden af en dobbelt datatype. Det vil være privat tilgængeligt.
- Erklæring af et klassemedlem ved navn højde af dobbelt datatype. Det vil være privat tilgængeligt.
- Slutningen af kroppen af BoxKlasse klasse.
- Initialiser derefter et statisk medlem af BoxKlasse klasse.
- Kalder hoved()-funktionen. De C++ programlogik skal tilføjes i kroppen af denne funktion.
- Udskriv noget tekst på konsollen med angivelse af det aktuelle antal objekter, før nye objekter oprettes.
- Erklære et objekt navngivet Box1, som er en af forekomsterne af klassen Boxklasse. Værdierne for bredde, længde og højde skal angives i parentesen.
- Erklære et objekt navngivet Box2, som er en forekomst af klassen Boxklasse. Værdierne for bredde, længde og højde er angivet i parentesen.
- Udskriv noget tekst på konsollen med angivelse af det aktuelle antal objekter efter oprettelsen af nye objekter.
- C++ program skal returnere værdi ved vellykket gennemførelse.
- Slutningen af hoveddelen af funktion main().
Adgang til statiske funktioner
Du behøver ikke oprette et klasseobjekt for at få adgang til en statisk funktion. I stedet kan du bruge klassenavnet og scope resolution operatoren (::).
Syntaks:
className::funcName
Ovenfor er className navnet på den klasse, hvor den statiske funktion er blevet defineret. FuncName er det navn, der er tildelt den statiske funktion.
Eksempel 2
#include<iostream>
using namespace std;
class MyClass {
public:
static void msgFunc() {
cout << "Welcome to Guru99!";
}
};
int main() {
MyClass::msgFunc();
}
Output:
Her er et skærmbillede af koden:
Kodeforklaring:
- Inkluderer iostream header-filen i vores program for at bruge dens funktioner.
- Inkluder std-navneområdet i din kode for at bruge dets klasser uden at kalde det.
- Opret en klasse ved navn MyClass.
- Brug offentlig adgangsmodifikator til at markere et klassemedlem som offentligt tilgængeligt.
- Erklærer en statisk funktion ved navn msgFunc(). Det statiske nøgleord gør funktionen statisk.
- Angiv den tekst, der skal udskrives på konsollen, når ovenstående funktion kaldes/kaldes.
- Slutningen af brødteksten af msgFunc()-funktionen.
- Afslut klassens krop.
- Kalder hoved()-funktionen.
- Kald den statiske funktion ved navn msgFunc().
- Slutningen af hoveddelen af funktion main().
Adgang til statiske variabler
Statiske variabler tilhører en klasse snarere end til klasseobjekter. Hvis en statisk variabel er offentlig, er den tilgængelig ved hjælp af klassenavnet og ved hjælp af scope resolution-operatoren. Dette er dog ikke muligt, hvis et statisk medlem er privat.
Normalt tilgås private variabler ved hjælp af offentlige funktioner. Der skal dog oprettes en klasseinstans/objekt. Løsningen er at bruge en statisk funktion.
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';
}
Output:
Her er et skærmbillede af koden:
Kodeforklaring:
- Inklusive iostream header-filen i vores program.
- Inkluder std-navneområdet i dette program for at bruge dets klasser uden at kalde.
- Opret en klasse ved navn AClass.
- Brug modifikatoren for privat adgang til at gøre variablen myvar privat tilgængelig.
- Opret en statisk heltalsvariabel ved navn myvar.
- Brug public access modifier, som markerer funktionen getVar() som offentligt tilgængelig.
- Oprettelse af en statisk funktion ved navn getVar().
- GetVar()-funktionen skulle være i stand til at returnere værdien af variablen myvar.
- Slutningen af kroppen af funktionen getVar().
- Slutningen af kroppen af klassen AKlasse.
- Tildel variablen myvar en værdi på 23. Vi har brugt klassens navn og scope resolution operator til dette.
- Kalder hoved()-funktionen.
- Udskriv værdien af variabel myVar på konsollen sammen med anden tekst. Vi har brugt klassenavnet, den statiske funktion og scope resolution operatoren til at få adgang til denne variabels værdi.
- Slutningen af hoved()-funktionsteksten.
denne pointer i statiske funktioner
En statisk funktion er ikke knyttet til et objekt. Det er derfor, statiske funktioner ikke har denne pointer. Et objekts markør peger normalt på det objekt, det arbejder på i øjeblikket. Da statiske funktioner ikke virker med objekter, er der ikke behov for denne markør.
Statiske funktioner har direkte adgang til andre statiske medlemmer. Dette er dog ikke tilfældet med ikke-statiske medlemmer. Årsagen er, at ikke-statiske medlemmer skal tilhøre et objekt, men statiske funktioner har ikke objekter at arbejde med.
Eksempel 4
Det er muligt at definere en statisk funktion uden for klasseerklæringen. Lad os 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;
}
Output:
Her er et skærmbillede af din kode:
Kodeforklaring:
- Inkluderer iostream-headerfilen i vores kode for at bruge dens funktioner.
- Inkluder std-navneområdet i vores kode for at bruge dets klasser uden at kalde det.
- Opret en klasse ved navn NumGenerator.
- Ved at bruge modifikatoren for privat adgang til at markere variablen er vi ved at oprette som privat tilgængelig.
- Opret en statisk heltalsvariabel ved navn nextNum.
- Brug af offentlig adgangsmodifikator, der hjælper dig med at markere den variabel, vi er ved at oprette, som offentligt tilgængelig.
- Erklærer en statisk funktion ved navn getNextNum().
- Slutningen af klassens krop.
- Tildel variablen nextNum en værdi på 1. Vi har gjort dette ved at bruge klassenavnet, variabelnavnet og scope-opløsningsoperatoren.
- Definerer den statiske getNextNum() funktion uden for klassen.
- Angiv den handling, der skal udføres, når ovenstående funktion kaldes/påkaldes. Det vil øge værdien af variabel nextNum med 1.
- Slut på definition af funktionen getNextNum().
- Kalder hoved()-funktionen. De C++ programlogik skal tilføjes i denne funktions brødtekst.
- Brug til løkke for at oprette en variabel med navnet count. Værdien af denne variabel bør stige fra 0 til 4. Efter hver iteration vil variablens værdi stige med 1.
- Udskrivning af værdien af variabel nextNum sammen med anden tekst på konsollen ved hver iteration. Værdien tilgås ved hjælp af getNextNum()-funktionen.
- Denne C++ programmet skal returnere værdi efter vellykket afslutning.
- Slut på main()-funktionen.
Resumé
- C++ statiske medlemmer er klassemedlemmer, der tilhører klassen i stedet for dens objekter.
- Du vil kun have én kopi af et statisk medlem uanset antallet af objekter, du opretter.
- Alle klasseobjekter deler hvert statisk klassemedlem.
- Efter at have defineret en klassefunktion som statisk, bliver den uafhængig af klasseobjekterne.
- En statisk funktion kan tilgås, selvom du ikke opretter noget klasseobjekt.
- Statiske funktioner har dog ikke dette objekt, som peger på klasseobjekter.






