(H) Lisää korttien siirtelyä

Tavoite: Opin käsittelemään älykkäitä osoittimia (shared_ptr-tyyppisiä).

Ohjeita: Hae ohjelmakoodipohja: templates/09/reverse/ -> student/09/reverse/.

Jatketaan korttipinon käsittelemistä, tällä kertaa kuitenkin shared_ptr-osoittimia käyttäen. Tässä tehtävässä toimitaan hyvin samantyylisesti kuin edellisen kierroksen korttipinotehtävässä.

Tiedostoon cards.hh on määritelty toteutettavan luokan rajapinta, jota ei saa muuttaa. Koska harjoittelemme dynaamista muistinhallintaa, tehtävänäsi on toteuttaa luokka ilman, että käytät STL:n säiliöitä, stringiä tai C++:n taulukkoa.

Tällä kertaa toteutettuna on myös kaksi metodeista tiedostossa cards.cpp. Tehtäväksi jää toteuttaa vain metodit remove, joka toimii samoin kuin edellisessäkin korttipakassa, ja reverse, joka kääntää korttipinon kortit päinvastaiseen järjestykseen.

Esimerkki siitä, miten luokan pitää toimia annetulla testipääohjelmalla:

constructor
Enter amount of test cards: 5

print (deck is empty)

add * n

print
1: 4
2: 3
3: 2
4: 1
5: 0

reverse

print
1: 0
2: 1
3: 2
4: 3
5: 4

remove 0
remove 1
remove 2
remove 3
remove 4

destructor

Saat tälläkin kertaa vapaasti muokata testipääohjelmaa, ja kattavampi testaaminen auttaa ohjelman toteuttamisessa. Automaattitarkastus testaa toteuttamasi luokan toimintaa ilman pääohjelmaa, eli tarkastin ei välitä siitä, mitä omassa testipääohjelmassasi tehdään.

Vinkkejä tehtävän tekemiseen:

  • Vaikka remove toimiikin täsmälleen samoin kuin edellisessä tehtävässä, on tässä tarkoitus pohtia, mikä ero toteutukseen tulee siitä, että käytetään tavallisen osoittimen sijaan shared_pointer-osoitinta.
  • Muista taas operaatiota toteuttaessasi miettiä, mitä kaikkia tapauksia linkitetyn tietorakenteen käsittelemisessä pitää ottaa huomioon (ensimmäinen alkio, viimeinen alkio, tyhjä lista, jne).
  • Automaattitestien läpäisemiseksi käytä tulostamiseen parametrina välitettävää virtaa s, älä cout:ia.

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