Emme edelleenkään ole ottaneet kantaa siihen, mitä tapahtuu, jos joku yrittää alustaa oliomme mielettömillä arvoilla, esimerkiksi:
cAika a1(42,175);
Toisaalta miten joku voisi muuttaa ajan arvoa muutenkin kuin lisaa- metodilla? Teemmekin aluksi metodin aseta, jota kutsuttaisiin
a1.aseta(12,15); a2.aseta(16);
Nyt pitää kuitenkin päättää mitä tarkoittaa laiton asetus! Jos sovimme että minuuteissa yli 59 arvot ovat aina 59 ja alle 0:n arvot ovat aina 0, voisi aseta- metodi olla kirjoitettu seuraavasti:
void aseta(int ih,int im=0) { h = ih; m = im; if ( m > 59 ) m = 59; if ( m < 0 ) m = 0; }
Jos taas haluaisimme, että ylimääräinen osuus siirtyisi tunteihin, voitaisiinkin tämä tehdä "kierosti" lisaa- metodin avulla
#include <iostream.h> #include <iomanip.h> class cAika { int h,m; public: void aseta(int ih,int im=0) { h = ih; m = im; lisaa(0); } cAika(int ih=0, int im=0) { aseta(ih,im); } void lisaa(int lisa_min) { ... } void tulosta() const { ... } }; int main(void) { cAika a1, a2(13), a3(14,25); a1.tulosta(); a2.tulosta(); a3.tulosta(); a1.aseta(12,15); a2.aseta(16,-15); a1.tulosta(); a2.tulosta(); return 0; }
Huomattakoon, että samalla kun tehdään aseta- metodi, kannattaa muodostajassakin kutsua sitä. Näin olion tilaa muutetaan vain muutamassa metodissa, jotka voidaan ohjelmoida niin huolella, ettei mitään yllätyksiä pääse koskaan tapahtumaan. Tämä rupeaa jo muistuttamaan olio- ohjelmointia!