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.