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