Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys

9.4.5 Polymorfismi, eli monimuotoisuus

Edellisestä esimerkistä ei oikeastaan paljastunut vielä mitään, mikä olisi puoltanut perintää. Korkeintaan snobbailu uudella syntaksilla. Mutta tosiasiassa pääsemme tästä kiinni olio- ohjelmoinnin tärkeimpään ominaisuuteen, ominaisuuteen jota on vaikea saavuttaa perinteisellä ohjelmoinnilla: polymorfismi ( polymorphism) eli monimuotoisuus.

Lisätäänpä vielä testiohjelman loppuun:

	  cAika a1; ...          a1.aseta(12,15);
	  cAikaSek a4(12,55,45); a4.lisaa(3,30);
	  pAika = &a1;  pAika->tulosta();
	  pAika = &a4;  pAika->tulosta();

Tulostus:

	12:15
	12:59

Mistä tässä oli kyse? Osoitin pAika oli monimuotoinen, eli sama osoitin osoitti kahteen eri tyyppiseen luokkaan. Tämä on mahdollista, jos luokat ovat samasta perimähierarkiasta kuten tässä tapauksessa ja osoitin on tyypiltään näiden yhteisen kantaluokan olion osoitin.

Mutta hei! Eikös jälkimmäinen tulostus olisi pitänyt olla sekuntien kanssa, olihan jälkimmäinen tulostettava luokka "aikaluokka jossa sekunnit"? Totta! Taas on alkuperäisen luokan tekijä möhlinyt eikä ole lainkaan ajatellut että joku voisi periä hänen luokkaansa. Tässä syy, miksi otamme perinnän mukaan tässä vaiheessa opintoja. Vaikka jatkossa emme hirveästi perinnän varaan rakennakaan, emme myöskään saa tehdä luokkia, jotka olisivat "väärin" tehtyjä!


Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys