C++ fundamentals through coding exercises
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

108 lines
2.7 KiB

4 years ago
  1. ## 3 Dynaamista muistinhallintaa
  2. **Tehtävä:**
  3. Luvun viimeisenä ohjelmointitehtävänä sinun tulee laatia aliohjelma "uusi_piste", jota käytetään seuraavassa esitetyn pääohjelman osana:
  4. int main()
  5. {
  6. Piste* pisteolio;
  7. pisteolio = uusi_piste();
  8. pisteolio->TulostaPiste();
  9. delete pisteolio;
  10. return 0;
  11. }
  12. 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.
  13. Sinun vastuulla olevan funktion "uusi_piste" tehtävänä on:
  14. - Luoda uusi (dynaaminen) olio luokasta "Piste"
  15. - Luominen tapahtuu seuraavan syntaksin mukaisesti: osoitin_olioon = new Piste;
  16. - Kysyä käyttäjältä esimerkkitulosteen esittämällä tavalla pisteoliolle asetettavat koordinaatit
  17. - Asettaa saadut koordinaatit funktiossa luodulle oliolle
  18. - Koordinaattien asetus tapahtuu seuraavan syntaksin mukaisesti: osoitin_olioon->AsetaPiste(x, y);
  19. - Palauttaa olion osoite sitä kutsuvalle pääohjelmalle
  20. - Olion osoite palautetaan seuraavan syntaksin mukaisesti: return osoitin_olioon;
  21. 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.
  22. Example output:
  23. ```
  24. Anna uuden pisteen x: 45
  25. Anna uuden pisteen y: 3
  26. Pisteen x-koordinaatti: 45
  27. Pisteen y-koordinaatti: 3
  28. ```
  29. **Vastaus:**
  30. ```
  31. //** Pre-defined code in the assignment **//
  32. #include <iostream>
  33. using namespace std;
  34. class Piste
  35. {
  36. public:
  37. void TulostaPiste();
  38. void AsetaPiste(int x, int y);
  39. private:
  40. int x_;
  41. int y_;
  42. };
  43. void Piste::TulostaPiste()
  44. {
  45. cout << "Pisteen x-koordinaatti: " << x_ << endl;
  46. cout << "Pisteen y-koordinaatti: " << y_ << endl;
  47. }
  48. void Piste::AsetaPiste(int x, int y)
  49. {
  50. x_ = x;
  51. y_ = y;
  52. }
  53. // Funktio "uusi_piste" palauttaa osoitteen funktion sisällä
  54. // muodostettuun dynaamiseen olioon, minkä vuoksi sen prototyyppi on seuraava:
  55. Piste* uusi_piste();
  56. int main()
  57. {
  58. Piste* pisteolio;
  59. pisteolio = uusi_piste();
  60. pisteolio->TulostaPiste();
  61. delete pisteolio;
  62. return 0;
  63. }
  64. //** ---------- ---------- ---------- **//
  65. Piste* uusi_piste() {
  66. short int x, y;
  67. Piste* piste = new Piste;
  68. cout << "Anna uuden pisteen x: ";
  69. cin >> x;
  70. if (cin.fail()) exit(1);
  71. cout << "Anna uuden pisteen y: ";
  72. cin >> y;
  73. if (cin.fail()) exit(1);
  74. piste->AsetaPiste(x, y);
  75. return piste;
  76. }
  77. ```