Muutetaanpa aikalisa luokaksi ja olioksi:
#include <iostream.h> #include <iomanip.h> struct cAika { int h,m; void lisaa(int lisa_min) { int yht_min = h * 60 + m + lisa_min; h = yht_min / 60; m = yht_min % 60; } void tulosta() const { cout << setfill('0') << setw(2) << h << ":" << setw(2) << m << endl; } }; int main(void) { cAika a1={12,15}, a2={13,16}, a3={14,25}; a1.lisaa(55); a1.tulosta(); a2.lisaa(27); a2.tulosta(); a3.lisaa(39); a3.tulosta(); return 0; }
Siinäpä se! Onko muutokset edelliseen nähden suuria? Siis iso osa koko olio- ohjelmoinnista (ja tietotekniikasta muutenkin) on markkinahenkilöiden huuhaata ja yleistä hysteriaa "kaiken ratkaisevan" teknologian ympärillä. No, tosin olio-ohjelmoinnissa on puolia, joita emme vielä ole nähneetkään, joiden ansiosta olio- ohjelmointia voidaan pitää uutena ja ohjelmointia ja ylläpitoa helpottavana teknologiana. Näitä ovat mm. perintä ja polymorfismi (monimuotoisuus), joihin emme valitettavasti tällä kurssilla ehdi perehtyä kovinkaan syvällisesti.
No takaisin esimerkkiimme. Uutta on lähinnä se, että metodien (no sanotaan tästä lähtien funktioita metodeiksi) parametrilistat ovat lyhentyneet. Itse oliota ei tarvitse enää viedä parametrinä, koska metodit ovat luokan sisäisiä ja tällöin luokkaa edustava olio kyllä tuntee itse itsensä. Samoin on jäänyt pois metodien sisältä viite olioon - samasta syystä:
... void lisaa(int lisa_min) { int yht_min = h * 60 + m + lisa_min; h = yht_min / 60; m = yht_min % 60; } ...
Metodia kutsutaan analogisesti tietueen kenttään viittaamisen kanssa, eli
a1.lisaa(55); a1.tulosta();
Tällekin on keksitty oma nimi: välitetään oliolle viesti "tulosta" ( message passing). Tässä kuitenkin jatkossa voi vielä lipsahtaa ja vahingossa sanomme kuitenkin, että kutsutaan metodia tulosta, vaikka ehkä pitäisi puhua viestin välittämisestä.
Metodin tulosta esittelyssä
void tulosta() const {
oleva const tarkoittaa että metodi ei muuta itse olion tilaa (sen attribuutteja). Metodi lisaa taas vastaavasti muuttaa olion tilaa hyvinkin paljon.