Kodused ülesanded
NB! Klasside ja liikmefunktsioonide deklaratsioonid ja definitsioonid kirjuta päisefaili kujund.h
Liikmefunktsioonide definitsioonid peavad olema väljaspool klassi.
1. Universaalne punkt
Kirjuta klassimall universaalse punkti jaoks template <unsigned short const n> class Punkt{...}
, kus n
on dimensioon ehk koordinaatide arv). Klass peab töötama suvalise positiivse arvu korral.
Klassis on
- privaatne isendiväli
std::vector<float>*
, mis hoiab punkti koordinaate - vaikekonstruktor, kus punkti koordinaadid väärtustatakse nulliga
- ühe parameetriga konstruktor, mis saab ette viida koordinaatide vektorile
- destruktor, mis vabastab mälu koordinaatide vektori alt
- funktsioon
kaugusPunktist
, mis saab parameetrina ette punkti, mille suhtes kaugust arvutada
float kaugusPunktist (Punkt<n>& p1)
- funktsioon
toString
, mis tagastab sõnena (string) punkti koordinaadid(x1, x2, ..., xn)
- funktsioon
getKoordinaadid()
, mis tagastab viida koordinaatide vektorile
NB! Lisapunkt, kui on töötav üledefineeritud operaatori operator<<
Näide programmi tööst
int main(){ vector<float> arvud1{1, 1}; vector<float> arvud2{2, 2}; const int arv = 5; Punkt<arv> punkt0; cout << "P0: " << punkt0.toString() << '\n'; Punkt<2> punkt1 {&arvud1}; Punkt<2> punkt2 {&arvud2}; cout << "P1: " << punkt1.toString() << '\n'; cout << "P2: " << punkt2.toString() << '\n'; cout << "P1 kaugus P2-st " << punkt1.kaugusPunktist(punkt2) << '\n'; return 0; } | P0: (0.000000, 0.000000, 0.000000, 0.000000, 0.000000) P1: (1.000000, 1.000000) P2: (2.000000, 2.000000) P1 kaugus P2-st 1.41421 |
2. Universaalne sirglõik
Kirjuta klassimall universaalse sirglõigu jaoks, milles on üks malliparameeter.
Klassis on
- kaks privaatset isendivälja
T* p1
jaT* p2
, mis hoiavad viitasid lõigu otspunktidele - vaikekonstruktorit ei ole
- kahe parameetriga konstruktor, mis saab ette viidad otspunktidele
- funktsioon
pikkus
, mis arvutab lõigu pikkuse - funktsioon
toString
, mis tagastab sõnena (string) lõigu kujul, nt(1, 2) - (2, 1)
. Kasutada punkti vastavat funktsiooni. - funktsioon
getKoordinaadid()
, mis tagastab viida koordinaatide vektorile
NB! Lisapunkt, kui on töötav üledefineeritud operaatori operator<<
Näide programmi tööst
int main(){ vector<float> arvud1{1, 1}; vector<float> arvud2{2, 2}; Punkt<2> punkt1 {&arvud1}; Punkt<2> punkt2 {&arvud2}; Sirgloik<Punkt<2>> sl1{&punkt1, &punkt2}; cout << "Lõik: " << sl1.toString() << '\n'; cout << "Lõigu pikkus: "<< sl1.pikkus() << '\n'; return 0; } | Lõik: (1.000000, 1.000000) - (2.000000, 2.000000) Lõigu pikkus: 1.41421 |