Versions Compared

Key

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

...

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

Esimerkki 4. Metodin oletusparametrit.

kuutio.h:

Code Block

class CKuutio

...


{

...


public:

...


    // Voit kutsua Tilavuus-metodia 1, 2 tai 3:lla

...

 parametrilla
    int Tilavuus(int a, int b = 25, int c = 1);

...


};

kuutio.cpp:

Code Block

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);
}

main.cpp:

Code Block

int main()
{
    CKuutio kuutio;

    int koko = 

int main()
{
    CKuutio kuutio;

...

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);

...


}

Tässä esimerkissä kutsutaan kolme kertaa CKuutio-luokan Tilavuus()-metodiafunktiota, antaen sille 3, 2 ja 1 parametria. Kun metodille funktiolle annetaan vähemmän kuin yksi parametri, niin metodia 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.

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.

Esimerkki 5. Vakiofunktiot (const).

#include <cstdlib>
#include <iostream>

using namespace std;

...

luokka.h:

Code Block

class CLuokka
{
private:
    int m_Luku;

...



public:

...


    CLuokka();

...


    void Tulosta()

...

 const;

...


};

luokka.cpp:

Code Block

CLuokka::CLuokka()

...

 :
    m_Luku(0)

...


{

...


}

...



void CLuokka::Tulosta() const

...


{
    printf("CLuokka - m_Luku =

...

 %d\n", m_Luku

...

);

...


}

main.cpp:

Code Block

int 

...

main()

...


{
    const CLuokka luokka;
    luokka.Tulosta();

...

       // Voidaan kutsua, sillä funktio on const-funktio.

...



    return 0;

...


}