Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Kysymyksiä static-sanasta

KoodiNoppa [17.03.2008 16:08:01]

#

Löysin eilen ensimmäistä kertaa tietoa static-sanasta ja nyt sen käytöstä on tullut mieleen muutama kysymys:
1)FunktioA sisältää static-muuttujan. Funktio-osoitin FunktioB=(*FunktioA). Onko FunktioB:tä kutsuttaessa muuttuja sama kuin FunktioA:ta kutsuttaessa?
2)Onko mahdollista jakaa sama static-muuttuja monen funktion/luokan kanssa?
3)Periytyykö static-muuttuja vai saako uusi luokka oman muuttujansa?

Lumi-ukkeli [17.03.2008 17:43:57]

#

1) on
2) on
3) riippuu miten periytät

Metabolix [17.03.2008 18:31:33]

#

Mikä tahansa static-muuttuja on olemassa tasan yhtenä kappaleena riippumatta mistään osoittimista ja luokista ja muista. Se toimii samaan tapaan kuin globaali muuttuja, mutta sen näkyvyysalue on tietenkin rajoitettu.

Jos luokka A sisältää staattisen muuttujan X, niin voi ajatella, että muuttujan nimi on A::X. Jos luokasta A peritty luokka B sanoo funktiossaan ++X, niin A::X kasvaa — paitsi jos luokalle B on määritelty oma muuttuja X, jolloin tietenkin kasvatetaan sitä. Jos taas B:n instanssista kutsutaan luokalta A perittyä funktiota, tämä funktio ei tietenkään tiedä muuttujasta B::X vaan korottaa muuttujaa A::X. Lisäksi luokan staattista muuttujaa koskevat normaalit luokan näkyvyyssäännöt, eli jos A::X on yksityinen (private), B-luokan funktiot eivät pääse siihen käsiksi. Siitä huolimatta B-luokan A-luokalta perimät funktiot voivat käsitellä sitä, eli b_otus.hae_x() voi olla täysin kelvollista koodia, jos hae_x on A-luokan funktio.

Mutkikasta? Ei sitä tarvitsekaan ymmärtää, jos jokin jäi epäselväksi, ota kääntäjä käteen ja katso, mitä se sanoo. :)

os [18.03.2008 11:55:49]

#

static-sanaa voi käyttää myös globaalien muuttujien ja funktioiden nimien kanssa, jolloin merkitys on erilainen: globaalit static-muuttujat ja -funktiot eivät näy oman lähdekooditiedostonsa ulkopuolelle edes extern-määreen kanssa.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta