Staatilise liikme funktsioon sisse C++ (Näited)
Mis on staatiline funktsioon C++?
In C++ klasside puhul on staatiline liige klassiliige, mis kuulub pigem klassi kui selle objektide hulka. Teil on ainult üks liikmelisuse koopia. See kehtib sõltumata teie loodud objektide arvust.
Kui klassifunktsioon on määratletud staatilisena, jagavad kõik klassiobjektid staatilist klassiliiget. Seetõttu saab staatilisele funktsioonile juurde pääseda ilma klassiobjekte loomata ja see muutub sõltumatuks klassi objektid. Staatilise andmeliige sees C++ pääseb juurde teistele staatilistele funktsioonidele, ainult väljaspool klassi.
Miks kasutada staatilisi funktsioone?
Erinevalt C++ globaalsete funktsioonide puhul on staatilistele funktsioonidele juurdepääs ainult deklaratsiooni failist. Kui on vaja juurdepääsu funktsioonile piirata, muutke see staatiliseks.
Kasutage staatilist funktsiooni, et piirata sama funktsiooni nime taaskasutamist teises failis.
Staatiliste funktsioonide määratlemine C++
süntaksit:
static int myfunc(void) { cout("Example of C++ static function "); }
Ülaltoodud näites määratleme staatilise funktsiooni nimega myfunc. Pange tähele staatilise märksõna kasutamist definitsioonis. Märksõna tuleb enne funktsiooni nime.
Staatilise liikme funktsioon sisse C++
Kui funktsiooni liige kuulutatakse staatiliseks, muutub see klassi teistest objektidest sõltumatuks. Staatilist liigefunktsiooni saab kutsuda ka siis, kui muid klassiobjekte pole.
Klasside nimedele juurdepääsuks peaksite kasutama klassi nime ja ulatuse eraldusvõime operaatorit (::)
. Staatiline funktsioon pääseb juurde ainult teistele staatilistele funktsioonidele, staatilistele andmeliikmetele ja muudele klassivälistele funktsioonidele. Staatiliste liikmefunktsioonide ulatus on klassi sees ja nad ei pääse sellele klassikursorile juurde.
Näiteks 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; }
Väljund:
Siin on koodi ekraanipilt:
Koodi selgitus:
- Kaasa arvatud iostream päisefail meie C++ programm selle kasutamiseks funktsioonid.
- Lisage koodi std nimeruum, et kasutada selle klasse ilma seda kutsumata.
- Looge klass nimega BoxKlass
- Kasutage avaliku juurdepääsu muutjat, et märkida klassi liige, mis on avalikult juurdepääsetav.
- Deklareerib staatilise klassi liikme nimega count.
- Kasutage klassi konstruktorit kolme topelttüüpi muutuja lähtestamiseks.
- Printige konsoolile teksti. Endl (lõpurea) funktsioon viib hiirekursori järgmisele reale.
- Initsialiseeri l väärtus muutuva pikkusega.
- Initsialiseerige b väärtus muutuva laiusega.
- Initsialiseerige h väärtus muutuva kõrgusega.
- Seejärel suurendage muutuja arvu väärtust 1 võrra iga kord, kui luuakse uus objekt.
- Konstruktori korpuse lõpp.
- Looge funktsioon nimega doublevolume().
- Määrake, mida funktsioon doubleVolume() tagastab. See peaks tagastama pikkuse, laiuse ja kõrguse muutujate korrutuse.
- Funktsiooni doubleVolume() keha lõpp.
- Deklareerige staatiline funktsioon nimega getCount().
- Funktsioon getCount() peaks tagastama loendusmuutuja väärtuse.
- Funktsiooni getCount() keha lõpp.
- Kasutage privaatse juurdepääsu modifikaatorit, et märkida klassi liige avalikult juurdepääsetavaks.
- Kahekordse andmetüübi pikkuseks nimetatud klassi liikme deklareerimine. See on privaatselt juurdepääsetav.
- Deklareerib teise klassi liikme nimega laius topeltandmetüübiks. See on privaatselt juurdepääsetav.
- Kahekordse andmetüübi kõrguse nimelise klassi liikme deklareerimine. See on privaatselt juurdepääsetav.
- Keha lõpp BoxKlassi klass.
- Seejärel lähtestage staatiline liige BoxKlassi klass.
- Funktsiooni main() kutsumine. The C++ programmi loogika tuleks lisada selle funktsiooni kehasse.
- Enne uute objektide loomist printige konsoolile tekst, mis näitab objektide praegust arvu.
- Deklareerige objekt nimega Box1, mis on üks klassi eksemplare BoxKlass. Laiuse, pikkuse ja kõrguse väärtused tuleks määrata sulgudes.
- Deklareerige objekt nimega Box2, mis on klassi eksemplar BoxKlass. Laiuse, pikkuse ja kõrguse väärtused on määratud sulgudes.
- Pärast uute objektide loomist printige konsoolile tekst, mis näitab praegust objektide arvu.
- . C++ programm peab edukal lõpetamisel tagastama väärtuse.
- Funktsiooni main() keha lõpp.
Juurdepääs staatilistele funktsioonidele
Staatilisele funktsioonile juurdepääsuks ei pea te klassiobjekti looma. Selle asemel saate kasutada klassi nime ja ulatuse eraldusvõime operaatorit (::)
.
süntaksit:
className::funcName
Ülal on className selle klassi nimi, kus staatiline funktsioon on määratletud. FuncName on staatilisele funktsioonile määratud nimi.
Näiteks 2
#include<iostream> using namespace std; class MyClass { public: static void msgFunc() { cout << "Welcome to Guru99!"; } }; int main() { MyClass::msgFunc(); }
Väljund:
Siin on koodi ekraanipilt:
Koodi selgitus:
- Iostreami päisefaili lisamine meie programmi selle funktsioonide kasutamiseks.
- Lisage oma koodi std nimeruum, et kasutada selle klasse ilma seda kutsumata.
- Looge klass nimega MyClass.
- Kasutage avaliku juurdepääsu muutjat, et märkida klassi liige avalikult juurdepääsetavaks.
- Staatilise funktsiooni msgFunc() deklareerimine. Staatiline märksõna muudab funktsiooni staatiliseks.
- Määrake tekst, mida konsoolil printida, kui ülaltoodud funktsioon on välja kutsutud/kutsutud.
- Funktsiooni msgFunc() keha lõpp.
- Lõpetage klassi keha.
- Funktsiooni main() kutsumine.
- Kutsuge staatiline funktsioon nimega msgFunc().
- Funktsiooni main() keha lõpp.
Juurdepääs staatilistele muutujatele
Staatilised muutujad kuuluvad pigem klassi kui klassiobjektide hulka. Kui staatiline muutuja on avalik, on see juurdepääsetav klassi nime ja ulatuse eraldusvõime operaatori abil. See ei ole aga võimalik, kui staatiline liige on privaatne.
Tavaliselt pääseb privaatsete muutujate juurde avalike funktsioonide abil. Siiski tuleb luua klassi eksemplar/objekt. Lahenduseks on staatilise funktsiooni kasutamine.
Näide 3: staatiline muutuja sisse C++ klass
#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'; }
Väljund:
Siin on koodi ekraanipilt:
Koodi selgitus:
- Kaasa arvatud iostream päisefail meie programmis.
- Kaasake sellesse programmi std nimeruum, et kasutada selle klasse ilma helistamata.
- Looge klass nimega AClass.
- Kasutage privaatjuurdepääsu muutjat, et muuta muutuja myvar privaatselt juurdepääsetavaks.
- Looge staatiline täisarvuline muutuja nimega myvar.
- Kasutage avaliku juurdepääsu muutjat, mis märgib funktsiooni getVar() avalikult juurdepääsetavaks.
- Staatilise funktsiooni getVar() loomine.
- Funktsioon getVar() peaks suutma tagastada muutuja myvar väärtuse.
- Funktsiooni getVar() keha lõpp.
- Klassi AC-klassi keha lõpp.
- Määrake muutujale myvar väärtus 23. Oleme selleks kasutanud klassi nime ja ulatuse eraldusvõime operaatorit.
- Funktsiooni main() kutsumine.
- Trüki muutuja myVar väärtus konsoolil koos muu tekstiga. Selle muutuja väärtusele juurdepääsuks oleme kasutanud klassi nime, staatilist funktsiooni ja ulatuse eraldusvõime operaatorit.
- Funktsiooni main() keha lõpp.
see kursor staatilistes funktsioonides
Staatiline funktsioon ei ole objektiga seotud. Seetõttu pole staatilistel funktsioonidel seda kursorit. Objekti kursor osutab tavaliselt objektile, mille kallal see parasjagu töötab. Kuna staatilised funktsioonid objektidega ei tööta, pole seda osutit vaja.
Staatilistel funktsioonidel on otsene juurdepääs teistele staatilistele liikmetele. See ei kehti aga mittestaatiliste liikmete puhul. Põhjus on selles, et mittestaatilised liikmed peavad kuuluma objektile, kuid staatilistel funktsioonidel pole objekte, millega töötada.
Näiteks 4
Staatilise funktsiooni on võimalik määratleda väljaspool klassi deklaratsiooni. Näitame seda:
#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; }
Väljund:
Siin on teie koodi ekraanipilt:
Koodi selgitus:
- Selle funktsioonide kasutamiseks lisage meie koodi iostream päisefail.
- Lisage meie koodi std nimeruum, et kasutada selle klasse ilma seda kutsumata.
- Looge klass nimega NumGenerator.
- Kasutades muutuja märkimiseks privaatjuurdepääsu modifikaatorit, loome selle privaatselt juurdepääsetavaks.
- Looge staatiline täisarvuline muutuja nimega nextNum.
- Kasutades avaliku juurdepääsu modifikaatorit, mis aitab teil märkida muutuja, mida me loome, avalikult juurdepääsetavaks.
- Staatilise funktsiooni getNextNum() deklareerimine.
- Klassi keha lõpp.
- Määrake muutujale nextNum väärtus 1. Oleme seda teinud klassi nime, muutuja nime ja ulatuse eraldusvõime operaatori abil.
- Staatilise funktsiooni getNextNum() määratlemine väljaspool klassi.
- Määrake toiming, mida tuleb teha, kui ülaltoodud funktsiooni kutsutakse/kutsutakse. See suurendab muutuja nextNum väärtust 1 võrra.
- Funktsiooni getNextNum() definitsiooni lõpp.
- Funktsiooni main() kutsumine. The C++ programmi loogika tuleks lisada selle funktsiooni kehasse.
- Kasutama silmuse jaoks muutuja loendi loomiseks. Selle muutuja väärtus peaks kasvama 0-st 4-ni. Pärast iga iteratsiooni suureneb muutuja väärtus 1 võrra.
- Muutuja nextNum väärtuse printimine konsoolil iga iteratsiooni ajal koos muu tekstiga. Väärtusele pääseb juurde funktsiooni getNextNum() abil.
- see C++ programm peab pärast edukat lõpetamist tagastama väärtuse.
- Funktsiooni main() lõpp.
kokkuvõte
- C++ staatilised liikmed on klassi liikmed, mis kuuluvad pigem klassi kui selle objektidesse.
- Teil on ainult üks staatilise liikme koopia, olenemata teie loodud objektide arvust.
- Kõik klassiobjektid jagavad iga staatilist klassi liiget.
- Pärast klassifunktsiooni määratlemist staatilisena muutub see klassiobjektidest sõltumatuks.
- Staatilisele funktsioonile pääseb juurde isegi siis, kui te ei loo ühtegi klassiobjekti.
- Staatilistel funktsioonidel pole aga seda objekti, mis osutab klassiobjektidele.