Statische lidfunctie in C++ (Voorbeelden)
Wat is een statische functie in C++?
In C++ klassen is een statisch lid een klasselid dat tot de klasse behoort en niet tot de objecten ervan. Je hebt slechts één exemplaar van het lidmaatschap. Dit is het geval ongeacht het aantal objecten dat u maakt.
Wanneer een klassefunctie als statisch wordt gedefinieerd, delen alle klasseobjecten een statisch klasselid. De statische functie is daarom toegankelijk zonder klasseobjecten te maken en wordt onafhankelijk van klasse objecten. Een statisch gegevenslid in C++ heeft alleen toegang tot andere statische functies, buiten de klasse.
Waarom statische functies gebruiken?
Anders C++ globale functies zijn statische functies alleen toegankelijk vanuit het aangiftebestand. Als het nodig is de toegang tot een functie te beperken, maak deze dan statisch.
Gebruik een statische functie om het hergebruik van dezelfde functienaam in een ander bestand te beperken.
Statische functies definiëren in C++
Syntax:
static int myfunc(void) { cout("Example of C++ static function "); }
In het bovenstaande voorbeeld definiëren we een statische functie met de naam myfunc. Let op het gebruik van het statische trefwoord in de definitie. Het trefwoord komt vóór de functienaam.
Statische lidfunctie in C++
Wanneer een functielid statisch wordt verklaard, wordt het onafhankelijk van andere objecten in de klasse. U kunt een statische lidfunctie aanroepen, zelfs als er geen andere klasseobjecten bestaan.
Om toegang te krijgen tot klassenamen, moet u de naam van de klasse en de scope resolution operator gebruiken (::)
. Een statische functie heeft alleen toegang tot andere statische functies, statische gegevensleden en andere functies buiten de klasse. Het bereik van statische lidfuncties ligt binnen de klasse en ze hebben geen toegang tot deze klasseaanwijzer.
Voorbeeld 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:
Hier is een screenshot van de code:
Code Verklaring:
- Inclusief het iostream-headerbestand in ons C++ programma om het te gebruiken functies.
- Neem de std-naamruimte op in de code om de klassen ervan te gebruiken zonder deze aan te roepen.
- Maak een klasse met de naam BoxKlasse.
- Gebruik de modifier voor openbare toegang om een klaslid te markeren dat openbaar toegankelijk is.
- Er wordt een statisch klasselid gedeclareerd met de naam count.
- Gebruik een klasseconstructor om drie variabelen van een double-type te initialiseren.
- Druk wat tekst af op de console. De functie endl (eindregel) verplaatst de muiscursor naar de volgende regel.
- Initialiseer de waarde van l tot variabele lengte.
- Initialiseer de waarde van b op variabele breedte.
- Initialiseer de waarde van h op variabele hoogte.
- Verhoog vervolgens de waarde van het aantal variabelen met 1 telkens wanneer een nieuw object wordt gemaakt.
- Einde van het constructorlichaam.
- Maak een functie met de naam doublevolume().
- Definieer wat de doubleVolume()-functie zal retourneren. Het zou de vermenigvuldiging van de lengte-, breedte- en hoogtevariabelen moeten retourneren.
- Einde van de body van de doubleVolume()-functie.
- Declareer een statische functie met de naam getCount().
- De functie getCount() moet de waarde van de count-variabele retourneren.
- Einde van de hoofdtekst van de functie getCount().
- Gebruik de privétoegangsmodifier om een klaslid als openbaar toegankelijk te markeren.
- Een klasselid met de naam length van een double-gegevenstype declareren. Het zal privé toegankelijk zijn.
- Declareer een ander klasselid met de naam breedte van een dubbel gegevenstype. Het zal privé toegankelijk zijn.
- Een klasselid met de naam height van het gegevenstype double declareren. Het zal privé toegankelijk zijn.
- Einde van het lichaam van de BoxKlasse klasse.
- Initialiseer vervolgens een statisch lid van de BoxKlasse klasse.
- De functie main() aanroepen. De C++ programmalogica moet worden toegevoegd binnen de hoofdtekst van die functie.
- Druk wat tekst af op de console met vermelding van het huidige aantal objecten voordat er nieuwe objecten worden gemaakt.
- Declareer een object met de naam Box1, een exemplaar van de klasse BoxKlas. De breedte-, lengte- en hoogtewaarden moeten tussen haakjes worden opgegeven.
- Declareer een object met de naam Box2, een exemplaar van de klasse BoxKlas. De waarden voor breedte, lengte en hoogte zijn tussen haakjes opgegeven.
- Druk wat tekst af op de console met vermelding van het huidige aantal objecten na het maken van nieuwe objecten.
- De C++ programma moet waarde retourneren na succesvolle voltooiing.
- Einde van de hoofdtekst van de functie main().
Toegang tot statische functies
U hoeft geen klasseobject te maken om toegang te krijgen tot een statische functie. In plaats daarvan kunt u de klassenaam en scope-resolutieoperator gebruiken (::)
.
Syntax:
className::funcName
Hierboven is de className de naam van de klasse waarin de statische functie is gedefinieerd. De funcName is de naam die aan de statische functie is toegewezen.
Voorbeeld 2
#include<iostream> using namespace std; class MyClass { public: static void msgFunc() { cout << "Welcome to Guru99!"; } }; int main() { MyClass::msgFunc(); }
Output:
Hier is een screenshot van de code:
Code Verklaring:
- Het iostream-headerbestand in ons programma opnemen om de functies ervan te gebruiken.
- Neem de std-naamruimte op in uw code om de klassen ervan te gebruiken zonder deze aan te roepen.
- Maak een klasse met de naam MyClass.
- Gebruik de modifier voor openbare toegang om een klaslid als openbaar toegankelijk te markeren.
- Een statische functie declareren met de naam msgFunc(). Het statische trefwoord maakt de functie statisch.
- Geef de tekst op die op de console moet worden afgedrukt zodra de bovenstaande functie wordt aangeroepen/aangeroepen.
- Einde van de hoofdtekst van de functie msgFunc().
- Beëindig de hoofdtekst van de klas.
- De functie main() aanroepen.
- Roep de statische functie aan met de naam msgFunc().
- Einde van de hoofdtekst van de functie main().
Toegang tot statische variabelen
Statische variabelen behoren tot een klasse in plaats van tot klasseobjecten. Als een statische variabele openbaar is, is deze toegankelijk met behulp van de klassenaam en de scope resolution operator. Dit is echter niet mogelijk als een statisch lid privé is.
Normaal gesproken worden privévariabelen benaderd via publieke functies. Er moet echter een klasse-instantie/object worden gemaakt. De oplossing is om een statische functie te gebruiken.
Voorbeeld 3: Statische variabele in 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:
Hier is een screenshot van de code:
Code Verklaring:
- Inclusief het iostream headerbestand in ons programma.
- Neem de std-naamruimte op in dit programma om de klassen ervan te gebruiken zonder aan te roepen.
- Maak een klasse met de naam AClass.
- Gebruik de privétoegangsmodifier om de variabele myvar privé toegankelijk te maken.
- Maak een statische geheeltallige variabele met de naam myvar.
- Gebruik de modifier voor openbare toegang die de functie getVar() als openbaar toegankelijk markeert.
- Een statische functie maken met de naam getVar().
- De functie getVar() zou de waarde van de variabele myvar moeten kunnen retourneren.
- Einde van de hoofdtekst van de functie getVar().
- Einde van de carrosserie van de klasse A-Klasse.
- Wijs de variabele myvar de waarde 23 toe. Hiervoor hebben we de klassenaam en de scope resolution operator gebruikt.
- De functie main() aanroepen.
- Druk de waarde van variabele myVar af op de console naast andere tekst. We hebben de klassenaam, de statische functie en de scope resolution operator gebruikt om toegang te krijgen tot de waarde van deze variabele.
- Het einde van de hoofdtekst van de functie main().
deze aanwijzer in statische functies
Een statische functie is niet aan een object gekoppeld. Dat is de reden waarom statische functies deze aanwijzer niet hebben. De aanwijzer van een object wijst doorgaans naar het object waaraan het momenteel werkt. Omdat statische functies niet werken met objecten, is deze aanwijzer niet nodig.
Statische functies hebben directe toegang tot andere statische leden. Dit is echter niet het geval bij niet-statische leden. De reden is dat niet-statische leden bij een object moeten horen, maar dat statische functies geen objecten hebben om mee te werken.
Voorbeeld 4
Het is mogelijk om een statische functie buiten de klassendeclaratie te definiëren. Laten we dit aantonen:
#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:
Hier is een screenshot van je code:
Code Verklaring:
- Het iostream-headerbestand opnemen in onze code om de functies ervan te gebruiken.
- Neem de std-naamruimte op in onze code om de klassen ervan te gebruiken zonder deze aan te roepen.
- Maak een klasse met de naam NumGenerator.
- Met behulp van de privétoegangsmodifier om de variabele te markeren, staan we op het punt deze als privé toegankelijk te maken.
- Maak een statische geheel getalvariabele met de naam nextNum.
- Met behulp van de openbare toegangsmodifier waarmee u de variabele die we gaan maken als openbaar toegankelijk kunt markeren.
- Het declareren van een statische functie met de naam getNextNum().
- Einde van het klassenlichaam.
- Wijs de variabele nextNum de waarde 1 toe. We hebben dit gedaan met behulp van de klassenaam, de variabelenaam en de scope resolution operator.
- Het definiëren van de statische functie getNextNum() buiten de klasse.
- Geef de actie op die moet worden ondernomen wanneer de bovenstaande functie wordt aangeroepen/aangeroepen. Het verhoogt de waarde van variabele nextNum met 1.
- Einde van de definitie van de functie getNextNum().
- De functie main() aanroepen. De C++ programmalogica moet worden toegevoegd aan de hoofdtekst van deze functie.
- Gebruik een for loop om een variabele met de naam count te maken. De waarde van deze variabele moet toenemen van 0 naar 4. Na elke iteratie zal de waarde van de variabele met 1 toenemen.
- Bij elke iteratie wordt de waarde van variabele nextNum afgedrukt naast andere tekst op de console. De waarde wordt benaderd met behulp van de functie getNextNum().
- Deze C++ programma moet waarde retourneren na succesvolle voltooiing.
- Einde van de functie main().
Samenvatting
- C++ statische leden zijn klasseleden die tot de klasse behoren en niet tot de objecten ervan.
- U heeft slechts één kopie van een statisch lid, ongeacht het aantal objecten dat u maakt.
- Alle klasseobjecten delen elk statisch klasselid.
- Nadat een klassefunctie als statisch is gedefinieerd, wordt deze onafhankelijk van de klasseobjecten.
- Een statische functie is toegankelijk, zelfs als u geen klasseobject maakt.
- Statische functies hebben dit object echter niet, dat verwijst naar klasseobjecten.