|
|
- ## 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 <iostream>
- 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;
- }
- ```
|