Kaiken tämän jälkeen lukija varmaan taas kysyy: Miksi vielä tuplata koodin pituus, kun aikacla4.cpp oli vielä jotenkin siedettävä alkuperäisen aikalis4.cpp:n rinnalla! Vastaus on uudelleen käytettävyys. Eli kun lopulta aika- luokkamme on valmis, paketoimme sen sellaiseksi, että se on helppo liittää myöhempiin omiin ohjelmiimme tai jopa luovuttaa (mahdollisesti korvausta vastaan :-) muille erillisenä komponenttina. Tuplatyö nyt saattaa olla 1/100 työ tulevaisuudessa.
Oikeasti siis jaamme koko ohjelman 3 eri tiedostoon:
aika.h luokan esittely
aika.cpp luokan toteutus
aikatest.cpp luokan testaava pääohjelma
#ifndef AIKA_H // Suoja, jottei samaa koodia "includata" kahta kertaa!
#define AIKA_H
class cAika {
int h,m;
public:
cAika(int ih=0, int im=0);
void aseta(int ih,int im=0);
void lisaa(int lisa_min);
void tulosta() const;
};
#endif // AIKA_H
#include <iostream.h>
#include <iomanip.h>
#include "aika.h"
void cAika::aseta(int ih,int im)
{
h = ih; m = im; lisaa(0);
}
cAika::cAika(int ih, int im)
{
aseta(ih,im);
}
void cAika::lisaa(int lisa_min)
{
int yht_min = h * 60 + m + lisa_min;
h = yht_min / 60;
m = yht_min % 60;
}
void cAika::tulosta() const
{
cout << setfill('0') << setw(2) << h << ":" << setw(2) << m << endl;
}
#include "aika.h"
// Projektiin aika.cpp ja aikatest.cpp
int main(void)
{
cAika a1, a2(13), a3(14,175);
a1.tulosta(); a2.tulosta(); a3.tulosta();
a1.aseta(12,15); a2.aseta(16,-15);
a1.tulosta(); a2.tulosta();
return 0;
}
Lopuksi tehtäisiin vielä projekti tai makefile johon kuuluvat aika.cpp ja aikatest.cpp.