Kodused ülesanded
1. Minu täisarv
Koosta klass MinuTaisarv
, mis hoiab privaatselt täisarvu ja milles on get-set funktsioonid (int getArv()
ja void setArv(int)
) täisarvu pärimiseks ja seadmiseks. Defineeri üle operaator[]
selliselt, et indeks i
korral tagastakse i
-ndal kohal olev number, kus i = 0
on üheliste koht.
Näiteks, kui arv
on MinuTaisarv
tüüpi ja täisarvuks on seatud 215, siis arv[0]
tagastab 5, arv[1]
tagastab 1, arv[2]
tagastab 2 ja arv[3]
tagastab -1.
Defineeri üle ka operaator <<
arvu kuvamiseks ekraanil nt MinuTaisarv: 215
.
Klassis peab olema vaikekonstruktor, ühe parameetriga konstruktor.
Programm peab hakkama saama ka juhuga, kus objekt luuakse vaikekonstruktoriga, st hoitavaks arvuks on 0.
Koosta ka klass Algarv
, mis on MinuTaisarv
alamklass. Klassis on lisaks privaatne isendiväli (täisarv), mis näitab, mitmes algarv see arv on.
Näiteks 1 on esimene, 2 on teine, 3 on kolmas, 5 on neljas algarv jne (sellise eelduse teeme lihtsuse mõttes). Ülemklassis olevat täisarvu hoidvat muutujat mitte üle defineerida. Vaikekonstruktorit mitte teha. Klass ei pea töötama negatiivse arvuga.
Defineeri üle operaator <<
arvu enda ja mitmes algarv ta on, kuvamiseks ekraanil. Näiteks arvuga 5 Algarv isendi korral saadetakse väljundvoogu Arv 5 on 4. algarv
.
Defineeri üle operaatorid ++
(post-increment) ja --
(post-decrement) (signatuurid on Algarv operator++(int)
ja Algarv operator--(int)
), mis tagastavad Algarv
objekti kas järgmise või eelmise algarvuga.
Järgnev koodilõik:
int main() { Algarv arv(5); Algarv uusArv = arv++; cout << arv << '\n'; cout << uusArv << '\n'; return 0; }
annab jägneva väljundi:
Arv 7 on 5. algarv Arv 5 on 4. algarv
Klassis peab olema ühe parameetriga konstruktor, mis määrab täisarvu. Konstruktoris arvutatakse, mitmes algarv see on. Kui arv ei ole algarv, siis väärtustatakse mitmes algarv väärtusega -1.
Koosta funktsioon loeArv
, mis saab argumendiks täisarvu. Kui sisestatud arv on algarv, siis funktsioon loob klassi Algarv
objekti, vastasel juhul klassi MinuTaisarv
objekti. Funktsioon tagastab arvu numbrite summa (ristsumma). Funktsioonis main
testida klasside ja funktsioonide tööd.
Vihje. Täisarvu numbreid on mugav hoida vektoris vector<int>
.
2. Toidukuller
Toidukuller pakub võimalust klientidele erinevaid toite koju tellida. Toidud on failis järgmisel kujul:
Risotto,5.00,10, Sushi,19.00, Vürtsikas porgandikook,6.50,15, Veiselihapasta seentega,11.50,
Iga rida algab toidu nimetusega. Nimetusele järgneb hind. Kui tegu on kampaaniapakkumisega, siis nimetusele ja hinnale järgneb soodustuse protsent (täisarv). Eraldajaks on koma (ka rea lõpus).
Programm peab sisaldama klasse Toit
ja KampaaniaToit
. Klasside kõik isendiväljad peavad olema privaatsed.
1. Klassis Toit
peavad olema privaatsed isendiväljad toidu nimetuse (string
) ja hinna (float
) jaoks.
2. Klassis peab olema vaikekonstruktor ja kahe parameetriga konstruktor isendiväljade määramiseks.
3. Klassis peavad olema funktsioonid isendiväljade seadmiseks ja pärimiseks. Hinna pärimiseks on virtuaalne funktsioon getHind
.
4. Klassis defineeritakse üle operaator <<
, mille abil on võimalik infot mõistlikult kuvada.
5. Klassis defineeritakse üle operaator <=
, mille abil on võimalik objekte võrrelda. Võrdlemine toimub hinna alusel.
Klass KampaaniaToit
on klassi Toit
alamklass. Ülemklassis olemasolevaid isendivälju siin uuesti mitte kirjeldada. Lisaks peab olema privaatne isendiväli soodustuse protsendi (int) jaoks.
1. Klassis peab olema vaikekonstruktor ja kolme parameetriga konstruktor, mille abil saab määrata toidu nimetuse, hinna ja soodustuse protsendi.
2. Klassis defineeritakse üle getHind
, mis arvutab hinna arvestades soodustuse protsendiga (valem: hind*(100-protsent)/100)
.
3. Klassis defineeritakse üle operaator <<
, mille abil on võimalik infot mõistlikult kuvada.
4. Klassis defineeritakse üle operaator <=
, mille abil on võimalik objekte võrrelda. Võrdlemine toimub hinna alusel.
Koosta funktsioon loe_toidud
, mis saab argumendiks sõnena faili nime ja viite andmestruktuurile vector<Toit>
. Funktsioon loeb failist toidud ja lisab vektorisse. Funktsioon tagastab toitude kogumaksumuse. NB! Kui viitasid (pointer) ei kasuta, siis vektori abil arvutatud kogumaksumuses ei kajastu soodustused.
Funktsioonis main
kuvatakse ekraanile mõistlikul kujul kõik toidud ja nende kogumaksumus. Katsetatakse ka objektide võrdlemist.
Programmi vormistamisel panna päisefaili toit.h
deklaratsioonid ja lähtekoodifaili toit.cpp
definitsioonid. Vajadusel teha funktsioone juurde. Funktsiooni main
sisaldav kood on eraldi failis.
3. Oma klassid
Mõtle välja oma ülesanne, kus on klasside hierarhia vähemalt kahe või kolme tasemega, nt Vanem<-Laps<-Lapselaps (Parent<-Child<-Grandchild). Igas klassis peavad olema isendiväljad, konstruktorid, operaatorite üledefineerimised ja funktsioonid andmetega opereerimiseks. Funktsioonis main
testida loodud klasse. Klasside ja funktsioonide deklaratsioonid paigutada päisefaili ja definitsioonid lähtekoodifaili. Ülesande tekst peab olema eraldi failis.
NB! Häid ja sisukaid ülesandeid premeeritakse lisapunktiga.