...
Staattiset
...
funktiot
...
Funktiot
...
voidaan
...
määritellä
...
staattisiksi,
...
mikä
...
tarkoittaa
...
että
...
funktio
...
silloin
...
ei
...
toimi
...
oliotasolla
...
vaan
...
luokkatasolla.
...
Silloin
...
funktiosta
...
on
...
olemassa
...
vain
...
yksi
...
kopio,
...
kun
...
taas
...
'normaaleista'
...
funktioista
...
(metodeista)
...
on
...
olemassa
...
yhtä
...
monta
...
kopioita
...
kuin
...
on
...
olioita.
...
Esimerkki
...
1.
...
Staattiset
...
funktiot,
...
luokka
...
toteuttaa
...
Singleton-mallin.
.h:
Code Block |
---|
. \#include <cstdlib> \#include <iostream> using namespace std; class CLuokka { public: static CLuokka\* Luo(); static void Tuhoa(); void Tulosta() { cout << "CLuokka - m_Itse = " << hex << s_Itse << ", this = " << this << endl; } private: CLuokka() {} ~CLuokka() {} private: static CLuokka\* s_Itse; // Osoitin 'itseensä'. }; |
.cpp:
Code Block |
---|
// Staattiset jäsenmuuttujat tulee luoda globaalissa nimiavaruudessa: CLuokka\* CLuokka::s_Itse = NULL; CLuokka\* CLuokka::Luo() { if (s_Itse == NULL) { s_Itse = new CLuokka; } } return s_Itse; } void CLuokka::Tuhoa() { if (s_Itse \!= NULL) { delete s_Itse; s_Itse = NULL; } } |
main:
Code Block |
---|
int main() { CLuokka\ CLuokka* luokka = CLuokka::Luo(); // Staattisia funktioita kutsutaan muodossa: LUOKAN_NIMI::FUNKTION_NIMI luokka->Tulosta(); CLuokka\ CLuokka* luokka2 = CLuokka::Luo(); luokka2->Tulosta(); CLuokka::Tuhoa(); return 0; } |