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.

160 lines
3.8 KiB

4 years ago
  1. ## 1 Joukkue koostuu pelaajista
  2. **Tehtävä:**
  3. Alla näet UML-kaavion, joka on osa suurempaa oliosuunnitelmaa. Sinun
  4. tehtävänäsi on toteuttaa kaavion mukainen luokka "Pelaaja". Kuten kuvasta
  5. voidaan nähdä, Joukkue-luokka koostuu pelaajista. Tämä ei kuitenkaan vaikuta
  6. sinun osuuteesi ohjelmiston toteutuksessa - riittää, kun osaat kirjoittaa
  7. luokan UML-kaavion osoittamalla tavalla.
  8. Ohessa joitakin huomioita, joita tarvitset kaavion tulkinnassa:
  9. - Merkit "-" ja "+" jäsenten edessä määrittelevät jäsenen näkyvyyden. (+ = public, - = private)
  10. - Notaatiossa esitetään ensin jäsenmuuttujan tai parametrin nimi ja tämän jälkeen tietotyyppi.
  11. - Jäsenfunktioiden paluuarvot näkyvät notaatiossa funktioiden otsikoiden perässä kaksoispisteellä eroteltuna.
  12. ```
  13. +---------------------------------+
  14. | Pelaaja |
  15. +---------------------------------+
  16. +--------+ |- rooli_: string |
  17. |Joukkue +-------------------------+- nimi_ : string |
  18. |--------| 1 40 |- pelinro_: int |
  19. +--------+ +---------------------------------+
  20. |+ AsetaNimi(nimi:string):void* |
  21. |+ KerroNimi():string |
  22. |+ AsetaRooli(rooli:string):void* |
  23. |+ KerroRooli():string |
  24. |+ AsetaNro(nro:int):void* |
  25. |+ KerroNro():int |
  26. +---------------------------------+
  27. ```
  28. Example output:
  29. ```
  30. Nimi: Matti Meikäläinen
  31. Rooli: Maalivahti
  32. Pelinumero: 1
  33. Nimi: Kale Kokkola
  34. Rooli: Vaihtopenkin lämmittäjä
  35. Pelinumero: 82
  36. Nimi: Simo Supermies
  37. Rooli: Hyökkääjä
  38. Pelinumero: 99
  39. ```
  40. **Vastaus:**
  41. ```
  42. #include<iostream>
  43. using namespace std;
  44. class Pelaaja
  45. {
  46. public:
  47. void AsetaNimi(string nimi)
  48. {
  49. nimi_ = nimi;
  50. }
  51. string KerroNimi()
  52. {
  53. return nimi_;
  54. }
  55. void AsetaRooli(string rooli)
  56. {
  57. rooli_ = rooli;
  58. }
  59. string KerroRooli()
  60. {
  61. return rooli_;
  62. }
  63. void AsetaNro(int nro)
  64. {
  65. pelinro_ = nro;
  66. }
  67. int KerroNro()
  68. {
  69. return pelinro_;
  70. }
  71. private:
  72. string rooli_;
  73. string nimi_;
  74. int pelinro_;
  75. };
  76. //** Pre-defined code in the assignment **//
  77. class Joukkue
  78. {
  79. public:
  80. void LisaaPelaaja(string nimi, string rooli, int nro);
  81. void TulostaJoukkue();
  82. Joukkue();
  83. ~Joukkue();
  84. private:
  85. Pelaaja* pelaajat[30];
  86. int pelaajia_;
  87. };
  88. Joukkue::Joukkue() : pelaajia_(0)
  89. {
  90. int i;
  91. for (i=0; i<30; i++) {
  92. pelaajat[i] = NULL;
  93. }
  94. }
  95. Joukkue::~Joukkue()
  96. {
  97. int i;
  98. for (i=0; i<30; i++) {
  99. delete pelaajat[i];
  100. }
  101. }
  102. void Joukkue::LisaaPelaaja(string nimi, string rooli, int nro)
  103. {
  104. pelaajat[pelaajia_] = new Pelaaja();
  105. pelaajat[pelaajia_]->AsetaNimi(nimi);
  106. pelaajat[pelaajia_]->AsetaRooli(rooli);
  107. pelaajat[pelaajia_]->AsetaNro(nro);
  108. pelaajia_++;
  109. }
  110. void Joukkue::TulostaJoukkue()
  111. {
  112. int i;
  113. for(i=0; i<30; i++) {
  114. if(pelaajat[i] != NULL)
  115. {
  116. cout << "Nimi: " << pelaajat[i]->KerroNimi() << endl;
  117. cout << "Rooli: " << pelaajat[i]->KerroRooli() << endl;
  118. cout << "Pelinumero: " << pelaajat[i]->KerroNro() << endl << endl;
  119. }
  120. }
  121. }
  122. int main()
  123. {
  124. Joukkue VioPa;
  125. VioPa.LisaaPelaaja("Matti Meikäläinen", "Maalivahti", 1);
  126. VioPa.LisaaPelaaja("Kale Kokkola", "Vaihtopenkin lämmittäjä", 82);
  127. VioPa.LisaaPelaaja("Simo Supermies", "Hyökkääjä", 99);
  128. VioPa.TulostaJoukkue();
  129. return 0;
  130. }
  131. //** ---------- ---------- ---------- **//
  132. ```