(H) Eläintarha

Tavoite: Opin periyttämään yksinkertaisen luokan valmiina annetusta kantaluokasta ja lisäämään periytettyyn luokkaan toiminnallisuutta.

Ohjeita: Hae ohjelmakoodipohja: templates/12/zoo/ -> student/12/zoo/.

Tutki ensin valmiina annettuja luokkia sekä pääohjelmaa, jossa luodaan erilaisia olioita ja kutsutaan olioille metodeja.

Tehtävänäsi on toteuttaa periyttämällä uudet luokat Mammal, Giraffe ja Cockatoo siten, että:

  • Mammal osaa suorittaa kaikki samat toimenpiteet kuin Animal, ja sen liikkuessa kuuluu ääni "Kip kop kip kop". Tämän lisäksi sillä on metodi suckle(std::ostream& output), joka tulostaa "Mus mus".
  • Giraffe osaa suorittaa kaikki samat toimenpiteet kuin Mammal, ja lisäksi sillä on metodi make_noise(std::ostream& output), joka tulostaa "Ori ori ori!".
  • Cockatoo osaa suorittaa kaikki samat toimenpiteet kuin Bird, ja sillä on metodi sing(std::ostream& output), joka tulostaa "Kee-ow kee-ow!".

Yllä olevaa on yritetty selkeyttää myös alla olevassa kuvassa. Kuvaan on merkitty kunkin luokan määrittelemät julkiset metodit sekä luokkien yksityiset jäsenmuuttujat. Metodien parametrit ja paluuarvot on jätetty selkeyden vuoksi kuvasta pois.

../../_images/perintahierarkia.png

Periytymisen hierarkinen rakenne

Valmiina annetussa testipääohjelmassa on kommenttimerkkien sisällä esimerkkejä siitä, miten toteutettavia luokkia on tarkoitus käyttää. Voit muokata testipääohjelmaa ja kirjoittaa siihen kattavampia testejä, koska automaattitarkastin ei testaa palautuksesi pääohjelmaa, vaan ainoastaan toteuttamiasi luokkia.

Vinkkejä tehtävän tekemiseen:

  • Jos ymmärsit edellisen materiaaliosion pohjalta, miten periytyminen toimii, huomaat, että tässä tehtävässä ei tarvita kuin muutama ohjelmakoodirivi. Sinun ei siis tarvitse kopoioida mitään valmiina annettua ohjelmakoodia mihinkään.

A+ esittää tässä kohdassa tehtävän palautuslomakkeen.