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

Compare with Current View Page History

Version 1 Next »

Oletusparametrit

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

Esimerkki 4. Metodin oletusparametrit.

class CKuutio
{
public:
     // Voit kutsua Tilavuus-metodia 1, 2 tai 3:lla parametrilla
    int Tilavuus(int a, int b = 25, int c = 1);
};

int CKuutio::Tilavuus(int a, int b, int c) // Huom, täällä ei enää anneta oletusparametreja!
{
    cout << "pituus=" << a << ", leveys=" << b << ", korkeus=" << c << " - ";
    return (a * b * c);
}

int main()
{
    CKuutio kuutio;

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

    koko = kuutio.Tilavuus(99, 49);
    cout << "Toinen tulos: " << koko << "\n";

    koko = kuutio.Tilavuus(98);
    cout << "Kolmas tulos: " << koko << "\n";
}

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

class CLuokka
{
private:
    int m_Luku;

public:
    CLuokka();
    void Tulosta()  const;
};

CLuokka::CLuokka() :
    m_Luku(0)
{
}

void CLuokka::Tulosta() const
{
    cout << "CLuokka - m_Luku = " << m_Luku << endl;
}

int main()
{
    const CLuokka luokka;
    luokka.Tulosta();     // Voidaan kutsua, sillä funktio on const-funktio.

    return 0;
}

  • No labels
You must log in to comment.