Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3
Wiki Markup
h2. Oletusparametrit

Metodeille (ja myös funktioille) voidaan antaa oletusparametreja,  joita käytetään, ellei metodin kutsussa ole annettu kaikkia  parametreja. !oletusparametrit.png|border=1!


h3. Esimerkki 4. Metodin oletusparametrit.

kuutio.h:
{code}
class CKuutio
{
public:
    // Voit kutsua Tilavuus-metodia 1, 2 tai 3:lla parametrilla
    int Tilavuus(int a, int b = 25, int c = 1);
};
{code}
kuutio.cpp:
{code}
int CKuutio::Tilavuus(int a, int b, int c)   // Huom, täällä ei enää anneta oletusparametreja!
{
    printf("pituus=%d, leveys=%d, korkeus=%d - ", a, b, c);

    return (a * b * c);
}
{code}
main.cpp:
{code}
int main()
{
    CKuutio kuutio;

    int koko = kuutio.Tilavuus(100, 50, 20);
    printf("Ensimmäinen tulos: %d\n", koko);

    koko = kuutio.Tilavuus(99, 49);
    printf("Toinen tulos: %d\n", koko);

    koko = kuutio.Tilavuus(98);
    printf("Kolmas tulos: %d\n", koko);
}
{code}

Tässä esimerkissä kutsutaan kolme kertaa *CKuutio*\-luokan _Tilavuus()_\-funktiota, antaen sille 3, 2 ja 1 parametria. Kun funktiolle annetaan vähemmän kuin yksi parametri, niin funktiota suoritettaessa parametri _c_ saa arvon 1, kun annetaan kaksi parametria, ja kun annetaan vain yksi parametri, saa _c_ arvon 1 ja _b_ arvon 25.

h2. Vakiofunktiot (const member functions)

Funktiot, jotka eivät muuta luokan muuttujien tilaa voidaan määritellä vakioiksi (const). Tämä mahdollistaa lisäksi funktion kutsumisen const-tyyppisen olion kautta. Jos const:ksi määritelty funktio kuitenkin yrittää muokata luokan jäsenmuuttujaa, antaa kääntäjä virheilmoituksen ja koodi ei käänny.

Yksi olio-ohjelmoinnin periaatteista on sallia vain tarvittavat  oikeudet, eli jos luokan jäsenfunktio ei muokkaa luokan tilaa (eli jäsenmuuttujia), niin se tulee merkitä const-tyyppiseksi. Tämä helpottaa koodin tarkistamista virhetilanteissa, sillä osa luokan funktioista voidaan suoraan unohtaa, sillä ne eivät voi muokata luokan tilaa.

h3. Esimerkki 5. Vakiofunktiot (const).

luokka.h:
{code}
class CLuokka
{
private:
    int m_Luku;

public:
    CLuokka();
    void Tulosta() const;
};
{code}
luokka.cpp:
{code}
CLuokka::CLuokka() :
    m_Luku(0)
{
}

void CLuokka::Tulosta() const
{
    printf("CLuokka - m_Luku = %d\n", m_Luku);
}
{code}
main.cpp:
{code}
int main()
{
    const CLuokka luokka;
    luokka.Tulosta();       // Voidaan kutsua, sillä funktio on const-funktio.

    return 0;
}
{code}