Oletusparametrit
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:
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:
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:
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); }
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.
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).
luokka.h:
class CLuokka { private: int m_Luku; public: CLuokka(); void Tulosta() const; };
luokka.cpp:
CLuokka::CLuokka() : m_Luku(0) { } void CLuokka::Tulosta() const { printf("CLuokka - m_Luku = %d\n", m_Luku); }
main.cpp:
int main() { const CLuokka luokka; luokka.Tulosta(); // Voidaan kutsua, sillä funktio on const-funktio. return 0; }