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.

181 lines
4.8 KiB

4 years ago
  1. ## 1 Luokan rakentaminen periyttämällä
  2. **Tehtävä:**
  3. Tässä tehtävässä sinun tulee toteuttaa luokka Auto, joka periytyy Ajoneuvo luokasta. Luokan Ajoneuvo määrittely on seuraava:
  4. ```
  5. class Ajoneuvo
  6. {
  7. public:
  8. Ajoneuvo(int ajetut, int paino, string merkki, string malli);
  9. protected:
  10. void Liikuta(int km);
  11. int PalautaAjetut();
  12. int PalautaPaino();
  13. string PalautaMerkki();
  14. string PalautaMalli();
  15. private:
  16. int ajetut_;
  17. int paino_;
  18. string merkki_;
  19. string malli_;
  20. };
  21. ```
  22. Ajoneuvo-luokka on melko yksinkertainen. Funktio Liikuta saa parametrina kilometrimäärän, jonka mukaisella määrällä kasvatetaan jäsenmuuttujan ajetut_ arvoa.
  23. Funktiot PalautaX palauttavat nimensä mukaiset arvot funktiota kutsuvalle ohjelman osalle. Huomaa, että luokan kaikki funktiot on määritelty protected määreellä, joten niiden palveluja voidaan hyödyntää vain Ajoneuvo-luokan aliluokissa.
  24. Sinun tehtävänäsi on laatia luokan määrittely ja jäsenfunktioden toteutus luokkaan Auto, joka perii luokan Ajoneuvo. Auto-luokka sisältää kaksi autolle ominaista jäsenmuuttujaa: string-tyypin rekisteri_nro_ ja int-tyypin matkustajat_max_, joka kuvaa autolle suurinta sallittua matkustajamäärää.
  25. Auto-luokkaan on tehtävä parametrillinen muodostin, jolle välitetään auton muodostamiseen tarvittavat tiedot (ajetut_, paino_, merkki_, malli_, rekisteri_nro_ ja matkustajat_max_). Osa parametreista välitetään Auto-luokan muodostajassa Ajoneuvo-luokan muodostajalle. Sinun tulisi kyetä päättelemään, mitkä.
  26. Muodostimen lisäksi Auto-luokkaan kirjoitetaan kaksi funktiota, joista ensimmäinen on TulostaAutonTiedot(), joka tulostaa auton tiedot mukaan lukien sen yläluokassa olevat tiedot. Funktio ei palauta arvoa, eikä ota vastaan arvoja. Tulostuksen muoto ilmenee esimerkkitulosteesta.
  27. Toinen varsinainen funktio Auto-luokassa on AjaAutoa(km), jonka tehtävänä on käyttää yliluokan palvelua Liikuta() ajettujen kilometrien kirjaamiseksi. Lisäksi funktio AjaAutoa() tulostaa näytölle ajettujen kilometrien määrän.
  28. Toteuttamaasi periytettyä luokkaa testataan seuraavalla pääohjelmalla (älä kopioi pääohjelmaa vastaukseesi):
  29. ```
  30. int main()
  31. {
  32. Auto pirssi(250000, 1700, "Toyota", "Carina II", "TFM-257", 5);
  33. pirssi.TulostaAutonTiedot();
  34. pirssi.AjaAutoa(25000);
  35. pirssi.TulostaAutonTiedot();
  36. return 0;
  37. }
  38. ```
  39. Example output:
  40. ```
  41. Merkki: Toyota
  42. Malli: Carina II
  43. Paino: 1700
  44. Ajetut kilometrit: 250000
  45. Rekisterinumero: TFM-257
  46. Maksimi matkustajien määrä: 5
  47. Autolla ajettu 25000 kilometriä.
  48. Merkki: Toyota
  49. Malli: Carina II
  50. Paino: 1700
  51. Ajetut kilometrit: 275000
  52. Rekisterinumero: TFM-257
  53. Maksimi matkustajien määrä: 5
  54. ```
  55. **Vastaus:**
  56. ```
  57. //** Pre-defined code in the assignment **//
  58. #include<iostream>
  59. using namespace std;
  60. class Ajoneuvo
  61. {
  62. public:
  63. Ajoneuvo(int ajetut, int paino, string merkki, string malli);
  64. protected:
  65. void Liikuta(int km);
  66. int PalautaAjetut();
  67. int PalautaPaino();
  68. string PalautaMerkki();
  69. string PalautaMalli();
  70. private:
  71. int ajetut_;
  72. int paino_;
  73. string merkki_;
  74. string malli_;
  75. };
  76. Ajoneuvo::Ajoneuvo(int ajetut, int paino, string merkki, string malli) : ajetut_(ajetut), paino_(paino), merkki_(merkki), malli_(malli)
  77. {
  78. }
  79. void Ajoneuvo::Liikuta(int km)
  80. {
  81. ajetut_ = ajetut_ + km;
  82. }
  83. int Ajoneuvo::PalautaAjetut()
  84. {
  85. return ajetut_;
  86. }
  87. int Ajoneuvo::PalautaPaino()
  88. {
  89. return paino_;
  90. }
  91. string Ajoneuvo::PalautaMerkki()
  92. {
  93. return merkki_;
  94. }
  95. string Ajoneuvo::PalautaMalli()
  96. {
  97. return malli_;
  98. }
  99. //** ---------- ---------- ---------- **//
  100. class Auto:public Ajoneuvo
  101. {
  102. public:
  103. Auto(int ajetut, int paino, string merkki, string malli, string rekisteri_nro, int matkustajat_max);
  104. void TulostaAutonTiedot();
  105. void AjaAutoa(int km);
  106. ~Auto();
  107. private:
  108. string rekisteri_nro_;
  109. int matkustajat_max_;
  110. };
  111. Auto::~Auto()
  112. {
  113. }
  114. Auto::Auto(int ajetut, int paino, string merkki, string malli, string rekisteri_nro, int matkustajat_max)
  115. : Ajoneuvo(ajetut, paino, merkki, malli), rekisteri_nro_(rekisteri_nro), matkustajat_max_(matkustajat_max)
  116. {
  117. }
  118. void Auto::TulostaAutonTiedot()
  119. {
  120. cout << "Merkki: " << Ajoneuvo::PalautaMerkki() << endl;
  121. cout << "Malli: " << Ajoneuvo::PalautaMalli() << endl;
  122. cout << "Paino: " << Ajoneuvo::PalautaPaino() << endl;
  123. cout << "Ajetut kilometrit: " << Ajoneuvo::PalautaAjetut() << endl;
  124. cout << "Rekisterinumero: " << rekisteri_nro_ << endl;
  125. cout << "Maksimi matkustajien määrä: " << matkustajat_max_ << endl << endl;
  126. }
  127. void Auto::AjaAutoa(int km)
  128. {
  129. Liikuta(km);
  130. cout << "Autolla ajettu " << km << " kilometriä." << endl << endl;
  131. }
  132. //** Pre-defined code in the assignment **//
  133. int main()
  134. {
  135. Auto pirssi(250000, 1700, "Toyota", "Carina II", "TFM-257", 5);
  136. pirssi.TulostaAutonTiedot();
  137. pirssi.AjaAutoa(25000);
  138. pirssi.TulostaAutonTiedot();
  139. return 0;
  140. }
  141. //** ---------- ---------- ---------- **//
  142. ```