- TIE-0240x
- 12. Luokkamuuttujat ja -funktiot
- 12.1 Luokkamuuttujat ja -funktiot
Luokkamuuttujat ja -funktiot¶
Rintala, Jokinen. Olioiden ohjelmointi C++lla mukaellen.
Ohjelman luokkarakennetta suuniteltaessa on mahdollista törmätä tilanteeseen, jossa jokin asia on kyllä luokan vastuulla, muttei kuulu yksinään minkään luokan olion tehtäviin. Sen sijaan, asia kuuluu ikäänkuin koko luokalle. Esimerkiksi päiväysluokalla voisi olla tiedossa vektori, jossa kaikkien kuukausien pituudet tai testauskäyttöön tieto siitä, montako luokan oliota on luotu ja funktio tämän tiedon palauttamiselle.
Luokkamuuttujat¶
C++:ssa luokan yhteisiä asioita varten tarkoitetut muuttujat eli muuttujat, jotka ovat kaikille luokan olioille yhteiset, esitellään luokkamuuttujina. Jäsenmuuttuja on luokkamuuttuja, kun sen esittely alkaa avainsanalla static
:
//olio.hh
class Olio {
public:
Olio();
private:
static unsigned int oliot_;
};
//olio.cc
unsigned int Olio::oliot_ = 0; //luokkamuuttujan alustus
Olio::Olio()
{
oliot_++; //luokkamuuttuja kaikille olioille yhteinen
}
Luokkamuuttuja ei kuulu millekään oliolle. Sehän on kaikkien luokan olioiden yhteinen. Tämän vuoksi luokkamuuttujaa ei voi alustaa luokan rakentajassa alustuslistassa. Luokkamuuttuja pitääkin alustaa erikseen. Yleensä alustus tehdään samassa tiedostossa, jossa luokan funktioiden toteutus on.
Luokkafunktiot¶
Luokkamuuttujien tapaan luokalle voidaan määritellä palveluita, jotka kohdistuvat koko luokkaan yhden luokan olion sijaan. Tällaisia ovat luokkamuuttujien käsittelyyn liittyvät funktiot ja muut luokanlaajuiset operaatiot. Luokkafunktio saadaan lisäämällä luokan esittelyssä funktion eteen avainsana static
.
//olio.hh
class Olio {
public:
....
static unsigned int Olioita();
};
unsigned int Olio::Olioita()
{
return oliot_;
}
Huom! Luokkafunktion määrittelyssä ei voi viitata jäsenmuuttujiin, jäsenfunktioihin eikä this
-osoittimella olioon itseensä.