Staattinen jäsentoiminto sisään C++ (Esimerkkejä)
Missä on staattinen funktio C++?
In C++ luokat, staattinen jäsen on luokan jäsen, joka kuuluu luokkaan eikä sen objekteihin. Sinulla on vain yksi kopio jäsenyydestä. Tämä pätee luomiesi objektien lukumäärästä riippumatta.
Kun luokkafunktio määritellään staattiseksi, kaikki luokkaobjektit jakavat staattisen luokan jäsenen. Staattista funktiota voidaan siis käyttää luomatta luokkaobjekteja ja siitä tulee riippumaton luokan esineitä. Staattinen datajäsen sisään C++ voi käyttää muita staattisia toimintoja, vain luokan ulkopuolella.
Miksi käyttää staattisia toimintoja?
Toisin kuin C++ globaalit funktiot, staattiset funktiot ovat käytettävissä vain ilmoitustiedostosta. Jos toimintoon pääsyä on rajoitettava, tee siitä staattinen.
Käytä staattista funktiota rajoittaaksesi saman funktionimen uudelleenkäyttöä toisessa tiedostossa.
Staattisten funktioiden määrittäminen C++
Syntaksi:
static int myfunc(void) { cout("Example of C++ static function "); }
Yllä olevassa esimerkissä määrittelemme staattisen funktion nimeltä myfunc. Huomaa staattisen avainsanan käyttö määritelmässä. Avainsana tulee ennen funktion nimeä.
Staattinen jäsentoiminto sisään C++
Kun funktion jäsen julistetaan staattiseksi, siitä tulee riippumaton muista luokan objekteista. Voit kutsua staattista jäsenfunktiota, vaikka muita luokkaobjekteja ei olisikaan.
Jotta pääset luokkien nimiin, sinun tulee käyttää luokan nimeä ja laajuuden resoluutiooperaattoria (::)
. Staattinen funktio voi käyttää vain muita staattisia toimintoja, staattisia datajäseniä ja muita luokan ulkopuolisia toimintoja. Staattisten jäsenfunktioiden laajuus on luokan sisällä, eivätkä ne voi käyttää tätä luokkaosoitinta.
Esimerkki 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; }
lähtö:
Tässä on kuvakaappaus koodista:
Koodin selitys:
- Sisältää iostream-otsikkotiedoston meidän C++ ohjelma käyttää sitä tehtävät.
- Sisällytä std-nimiavaruus koodiin, jotta voit käyttää sen luokkia kutsumatta sitä.
- Luo luokka nimeltä BoxLuokka.
- Käytä julkisen käyttöoikeuden muokkaajaa merkitäksesi luokan jäsen, joka on julkisesti saatavilla.
- Ilmoittaa staattisen luokan jäsenen nimeltä count.
- Käytä luokkarakentajaa kolmen kaksoistyypin muuttujan alustamiseen.
- Tulosta tekstiä konsoliin. Endl (loppurivi) -toiminto siirtää hiiren kohdistimen seuraavalle riville.
- Alusta l:n arvo muuttuvaan pituuteen.
- Alusta b:n arvo muuttujaleveyteen.
- Alusta h:n arvo muuttuvaan korkeuteen.
- Lisää sitten muuttujan count arvoa yhdellä aina, kun uusi objekti luodaan.
- Rakentajan rungon loppu.
- Luo funktio nimeltä doublevolume().
- Määritä, mitä doubleVolume()-funktio palauttaa. Sen pitäisi palauttaa pituus-, leveys- ja korkeusmuuttujien kertolasku.
- DoubleVolume()-funktion rungon loppu.
- Ilmoita staattinen funktio nimeltä getCount().
- GetCount()-funktion pitäisi palauttaa count-muuttujan arvo.
- GetCount()-funktion rungon loppu.
- Käytä yksityisen käyttöoikeuden muokkaajaa merkitäksesi luokan jäsen julkisesti käytettäväksi.
- Luokan jäsenen nimen ilmoittaminen kaksoistietotyypin pituus. Se tulee olemaan yksityisesti saatavilla.
- Ilmoita toinen luokan jäsen nimeltä leveys kaksoistietotyypiksi. Se tulee olemaan yksityisesti saatavilla.
- Luokan jäsenen ilmoittaminen kaksoistietotyypin korkeus. Se tulee olemaan yksityisesti saatavilla.
- Rungon loppu BoxLuokkaluokka.
- Alusta sitten staattinen jäsen BoxLuokkaluokka.
- Main()-funktion kutsuminen. The C++ Ohjelmalogiikka tulisi lisätä kyseisen funktion runkoon.
- Tulosta konsoliin tekstiä, jossa kerrotaan objektien nykyinen määrä ennen uusien objektien luomista.
- Ilmoita objektin nimi Box1, joka on yksi luokan esiintymistä BoxLuokka. Leveys-, pituus- ja korkeusarvot tulee määrittää suluissa.
- Ilmoita objektin nimi Box2, joka on luokan esiintymä BoxLuokka. Leveys-, pituus- ja korkeusarvot on määritetty suluissa.
- Tulosta konsoliin tekstiä, jossa kerrotaan objektien nykyinen lukumäärä uusien objektien luomisen jälkeen.
- - C++ ohjelma on palautettava arvo onnistuneen suorittamisen jälkeen.
- Funktion main() rungon loppu.
Staattisten toimintojen käyttäminen
Sinun ei tarvitse luoda luokkaobjektia päästäksesi staattiseen funktioon. Sen sijaan voit käyttää luokan nimeä ja laajuuden resoluutiooperaattoria (::)
.
Syntaksi:
className::funcName
Yllä oleva className on sen luokan nimi, jossa staattinen funktio on määritetty. FuncName on staattiselle funktiolle annettu nimi.
Esimerkki 2
#include<iostream> using namespace std; class MyClass { public: static void msgFunc() { cout << "Welcome to Guru99!"; } }; int main() { MyClass::msgFunc(); }
lähtö:
Tässä on kuvakaappaus koodista:
Koodin selitys:
- Sisällytä iostream-otsikkotiedosto ohjelmaamme käyttääksesi sen toimintoja.
- Sisällytä std-nimiavaruus koodiisi käyttääksesi sen luokkia kutsumatta sitä.
- Luo luokka nimeltä MyClass.
- Käytä julkisen käyttöoikeuden muokkaajaa merkitäksesi luokan jäsen julkisesti käytettäväksi.
- Staattisen funktion msgFunc() ilmoittaminen. Staattinen avainsana tekee funktiosta staattisen.
- Määritä teksti, joka tulostetaan konsolissa, kun yllä olevaa toimintoa kutsutaan/kutsutaan.
- msgFunc()-funktion rungon loppu.
- Lopeta luokan runko.
- Main()-funktion kutsuminen.
- Kutsu staattista funktiota nimeltä msgFunc().
- Funktion main() rungon loppu.
Staattisten muuttujien käyttö
Staattiset muuttujat kuuluvat luokkaan pikemminkin kuin luokkaobjekteihin. Jos staattinen muuttuja on julkinen, se on käytettävissä luokan nimen ja laajuuden resoluutio-operaattorin avulla. Tämä ei kuitenkaan ole mahdollista, jos staattinen jäsen on yksityinen.
Normaalisti yksityisiin muuttujiin päästään julkisilla funktioilla. Luokan ilmentymä/objekti on kuitenkin luotava. Ratkaisu on käyttää staattista funktiota.
Esimerkki 3: Staattinen muuttuja in C++ luokka
#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'; }
lähtö:
Tässä on kuvakaappaus koodista:
Koodin selitys:
- Sisältää iostream-otsikkotiedoston ohjelmaamme.
- Sisällytä std-nimiavaruus tähän ohjelmaan, jotta voit käyttää sen luokkia kutsumatta.
- Luo luokka nimeltä AClass.
- Käytä yksityisen käyttöoikeuden muokkaajaa tehdäksesi muuttujasta myvar yksityisesti käytettävissä.
- Luo staattinen kokonaislukumuuttuja nimeltä myvar.
- Käytä julkisen käyttöoikeuden muokkaajaa, joka merkitsee funktion getVar() julkisesti käytettäväksi.
- Luodaan staattinen funktio nimeltä getVar().
- GetVar()-funktion pitäisi pystyä palauttamaan muuttujan myvar arvo.
- Funktion getVar() rungon loppu.
- Luokan AC-luokan rungon loppu.
- Anna muuttujalle myvar arvo 23. Olemme käyttäneet tähän luokan nimeä ja laajuuden resoluutiooperaattoria.
- Main()-funktion kutsuminen.
- Tulosta muuttujan myVar arvo konsoliin muun tekstin rinnalle. Olemme käyttäneet luokan nimeä, staattista funktiota ja laajuuden resoluutiooperaattoria päästäksemme tämän muuttujan arvoon.
- Main()-funktion rungon loppu.
tämä osoitin staattisissa funktioissa
Staattista funktiota ei ole liitetty objektiin. Tästä syystä staattisissa funktioissa ei ole tätä osoitinta. Objektin osoitin osoittaa yleensä objektiin, jonka parissa se parhaillaan työskentelee. Koska staattiset funktiot eivät toimi objektien kanssa, tätä osoitinta ei tarvita.
Staattisilla toiminnoilla on suora pääsy muihin staattisiin jäseniin. Näin ei kuitenkaan ole ei-staattisten jäsenten kohdalla. Syynä on, että ei-staattisten jäsenten on kuuluttava objektiin, mutta staattisilla funktioilla ei ole objekteja, joiden kanssa työskennellä.
Esimerkki 4
On mahdollista määritellä staattinen funktio luokkamäärittelyn ulkopuolella. Osoittakaamme tämä:
#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; }
lähtö:
Tässä on kuvakaappaus koodistasi:
Koodin selitys:
- Sisällytä iostream-otsikkotiedosto koodiimme käyttääksesi sen toimintoja.
- Sisällytä std-nimiavaruus koodiimme käyttääksesi sen luokkia kutsumatta sitä.
- Luo luokka nimeltä NumGenerator.
- Käytämme yksityisen käyttöoikeuden muokkaajaa muuttujan merkitsemiseen, ja olemme luomassa yksityisesti käytettävissä olevaksi.
- Luo staattinen kokonaislukumuuttuja nimeltä nextNum.
- Käytä julkisen käyttöoikeuden muokkausta, joka auttaa merkitsemään muuttujan, jonka olemme luomassa, julkisesti käytettäväksi.
- Selvitetään staattinen funktio nimeltä getNextNum().
- Luokan rungon loppu.
- Anna muuttuja nextNum arvoksi 1. Olemme tehneet tämän käyttämällä luokan nimeä, muuttujan nimeä ja laajuuden resoluutiooperaattoria.
- Staattisen getNextNum()-funktion määrittäminen luokan ulkopuolella.
- Määritä toimenpide, joka suoritetaan, kun yllä olevaa toimintoa kutsutaan/kutsutaan. Se kasvattaa muuttujan nextNum arvoa yhdellä.
- Funktion getNextNum() määritelmän loppu.
- Main()-funktion kutsuminen. The C++ Ohjelmalogiikka tulisi lisätä tämän funktion runkoon.
- Käyttää silmukalle luodaksesi muuttujan nimeltä count. Tämän muuttujan arvon tulee kasvaa 0:sta 4:ään. Jokaisen iteraation jälkeen muuttujan arvo kasvaa yhdellä.
- Muuttujan nextNum arvon tulostaminen muun tekstin rinnalle konsolissa jokaisessa iteraatiossa. Arvoa haetaan getNextNum()-funktiolla.
- Tämä C++ Ohjelman on palautettava arvo onnistuneen valmistumisen jälkeen.
- Main()-funktion loppu.
Yhteenveto
- C++ Staattiset jäsenet ovat luokan jäseniä, jotka kuuluvat luokkaan pikemminkin kuin sen objekteihin.
- Sinulla on vain yksi kopio staattisesta jäsenestä riippumatta luomiesi objektien määrästä.
- Kaikki luokkaobjektit jakavat jokaisen staattisen luokan jäsenen.
- Kun luokkafunktio on määritelty staattiseksi, siitä tulee riippumaton luokkaobjekteista.
- Staattista funktiota voidaan käyttää, vaikka et luoisi yhtään luokkaobjektia.
- Staattisissa funktioissa ei kuitenkaan ole tätä objektia, joka osoittaa luokkaobjekteihin.