Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Staattiset funktiotStaattiset 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* 

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

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

...

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* luokka = CLuokka::Luo();

...

  // Staattisia funktioita kutsutaan muodossa: LUOKAN_NIMI::FUNKTION_NIMI

...


    luokka->Tulosta();

...



    CLuokka* luokka2 = CLuokka::Luo();

...


    luokka2->Tulosta();

...



    CLuokka::Tuhoa();

...



    return 0;

...


}