You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

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 6. Staattiset funktiot, luokka toteuttaa Singleton-mallin.

#include <cstdlib>
#include <iostream>

using namespace std;

class CLuokka
{
public:
     static CLuokka* Luo();
     static void Tuhoa();
    void Tulosta()

Unknown macro: { cout << "CLuokka - m_Itse = " << hex << s_Itse << ", this = " << this << endl; }

private:
    CLuokka() {}
    ~CLuokka() {}

private:
     static CLuokka* s_Itse; // Osoitin 'itseensä'.
};

// Staattiset jäsenmuuttujat tulee  luoda globaalissa nimiavaruudessa:
CLuokka* CLuokka::s_Itse = NULL;

CLuokka* CLuokka::Luo()
{
    if (s_Itse == NULL)

Unknown macro: {        s_Itse = new CLuokka;    }

    return s_Itse;
}

void CLuokka::Tuhoa()
{
    if (s_Itse != NULL)

Unknown macro: {        delete s_Itse;        s_Itse = NULL;    }

}

int main()
{
    CLuokka* luokka = CLuokka::Luo();  // Staattisia funktioita kutsutaan muodossa: LUOKAN_NIMI::FUNKTION_NIMI
    luokka->Tulosta();

    CLuokka* luokka2 = CLuokka::Luo();
    luokka2->Tulosta();

    CLuokka::Tuhoa();

    return 0;
}

  • No labels
You must log in to comment.