(H) Lisää korttien siirtelyä¶
Tavoite:
Opin käsittelemään älykkäitä osoittimia (shared_ptr
-tyyppisiä).
Ohjeita:
Hae ohjelmakoodipohja: templates/10/reverse/
->
student/10/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 sijaanshared_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).
A+ esittää tässä kohdassa tehtävän palautuslomakkeen.