previous next Up Title Contents Index

9.3.8 Sisäinen tilan valvonta


Emme edelleenkään ole ottaneet kantaa siihen, mitä tapahtuu, jos joku yrittää alustaa oliomme mielettömillä arvoilla, esim:
	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

olioalk\aikacla4.cpp - sisäinen tilan valvonta asetuksessa

	#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!

Tehtävä 9.81 Negatiivinen minuuttiasetus

Mitä ohjelma aikacla4.cpp tulostaisi? Miksi ohjelma toimisi halutulla tavalla?

Tehtävä 9.82 Tuntien tarkistus

Ohjelmoi myös tunneille tarkistus, missä pidetään huoli siitä, että tunnit ovat aina välillä 0-23.


previous next Up Title Contents Index