Versions Compared

Key

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

Metodeille 

Oletusparametrit

...

(ja myös funktioille) voidaan antaa oletusparametreja,  joita käytetään, ellei metodin kutsussa ole annettu kaikkia  parametreja

...

Esimerkki 4. Metodin oletusparametrit.

. !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}