## 3 Dynaamista muistinhallintaa **Tehtävä:** Luvun viimeisenä ohjelmointitehtävänä sinun tulee laatia aliohjelma "uusi_piste", jota käytetään seuraavassa esitetyn pääohjelman osana: int main() { Piste* pisteolio; pisteolio = uusi_piste(); pisteolio->TulostaPiste(); delete pisteolio; return 0; } Luokka "Piste", jota pääohjelmassa ja aliohjelmassa "uusi_piste" käytetään, sisältää kaksi jäsenmuuttujaa: koordinaatit x ja y, sekä jäsenfunktiot "TulostaPiste" ja "AsetaPiste". Funktion TulostaPiste tehtävänä on tulostaa piste-olion koordinaatit näytölle ja AsetaPiste puolestaan asettaa sille parametrina välitetyt koordinaatit olion jäsenmuuttujiin. Sinun vastuulla olevan funktion "uusi_piste" tehtävänä on: - Luoda uusi (dynaaminen) olio luokasta "Piste" - Luominen tapahtuu seuraavan syntaksin mukaisesti: osoitin_olioon = new Piste; - Kysyä käyttäjältä esimerkkitulosteen esittämällä tavalla pisteoliolle asetettavat koordinaatit - Asettaa saadut koordinaatit funktiossa luodulle oliolle - Koordinaattien asetus tapahtuu seuraavan syntaksin mukaisesti: osoitin_olioon->AsetaPiste(x, y); - Palauttaa olion osoite sitä kutsuvalle pääohjelmalle - Olion osoite palautetaan seuraavan syntaksin mukaisesti: return osoitin_olioon; Funktio "uusi_piste" palauttaa osoitteen funktion sisällä muodostettuun dynaamiseen olioon, jonka vuoksi sen prototyyppi on seuraava: Piste* uusi_piste();. Sinun tulee kirjoittaa vain funktion otsikko ja toteutus prototyyppi on valmiiksi kirjoitettu. Example output: ``` Anna uuden pisteen x: 45 Anna uuden pisteen y: 3 Pisteen x-koordinaatti: 45 Pisteen y-koordinaatti: 3 ``` **Vastaus:** ``` //** Pre-defined code in the assignment **// #include using namespace std; class Piste { public: void TulostaPiste(); void AsetaPiste(int x, int y); private: int x_; int y_; }; void Piste::TulostaPiste() { cout << "Pisteen x-koordinaatti: " << x_ << endl; cout << "Pisteen y-koordinaatti: " << y_ << endl; } void Piste::AsetaPiste(int x, int y) { x_ = x; y_ = y; } // Funktio "uusi_piste" palauttaa osoitteen funktion sisällä // muodostettuun dynaamiseen olioon, minkä vuoksi sen prototyyppi on seuraava: Piste* uusi_piste(); int main() { Piste* pisteolio; pisteolio = uusi_piste(); pisteolio->TulostaPiste(); delete pisteolio; return 0; } //** ---------- ---------- ---------- **// Piste* uusi_piste() { short int x, y; Piste* piste = new Piste; cout << "Anna uuden pisteen x: "; cin >> x; if (cin.fail()) exit(1); cout << "Anna uuden pisteen y: "; cin >> y; if (cin.fail()) exit(1); piste->AsetaPiste(x, y); return piste; } ```