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.

134 lines
2.7 KiB

4 years ago
  1. ## 2 Abstraktin luokan määrittely
  2. **Tehtävä:**
  3. Tehtävänäsi on kirjoittaa luokan Kuvio määrittely. Kyseinen luokka on abstrakti luokka, josta periytetään luokka Nelio.
  4. Määrittele ja toteuta Kuvio-luokkaan seuraavat ominaisuudet:
  5. - char-tyypin jäsenmuuttuja tekstuuri_
  6. - Parametrillinen muodostin, jolle välitetään muodostamisen yhteydessä char-tyypin parametri, jonka arvo sijoitetaan muuttujaan tekstuuri_
  7. - Jäsenfunktio PalautaTekstuuri(), joka palauttaa sitä kutsuttaessa jäsenmuuttujan tekstuuri_ arvon
  8. - Puhtaasti virtuaalinen funktio Piirra, joka ei palauta arvoa, eikä ota vastaan parametreja
  9. Toteuttamaasi abstraktia luokkaa testataan pääohjelmassa, jossa muodostetaan Kuvio-luokasta periytetty nelio-olio jota pyydetään tulostamaan itsensä. Älä kopioi pääohjelmaa vastaukseesi:
  10. ```
  11. int main()
  12. {
  13. int sivun_pituus;
  14. char tekstuuri;
  15. cout << "Anna muodostettavan neliön sivun pituus: ";
  16. cin >> sivun_pituus;
  17. cout << "Syötä merkki, jota käytetään neliön tekstuurina: ";
  18. cin >> tekstuuri;
  19. Kuvio* nelio = new Nelio(tekstuuri, sivun_pituus);
  20. nelio->Piirra();
  21. delete nelio;
  22. return 0;
  23. }
  24. ```
  25. Example output:
  26. ```
  27. Anna muodostettavan neliön sivun pituus: 10
  28. Syötä merkki, jota käytetään neliön tekstuurina: #
  29. ##########
  30. ##########
  31. ##########
  32. ##########
  33. ##########
  34. ##########
  35. ##########
  36. ##########
  37. ##########
  38. ##########
  39. ```
  40. **Vastaus:**
  41. ```
  42. #include<iostream>
  43. using namespace std;
  44. class Kuvio {
  45. public:
  46. Kuvio(char tekstuuri);
  47. char PalautaTekstuuri();
  48. virtual void Piirra() = 0;
  49. ~Kuvio();
  50. private:
  51. char tekstuuri_;
  52. };
  53. Kuvio::Kuvio(char tekstuuri) : tekstuuri_(tekstuuri)
  54. {
  55. }
  56. char Kuvio::PalautaTekstuuri()
  57. {
  58. return tekstuuri_;
  59. }
  60. Kuvio::~Kuvio() {}
  61. void Kuvio::Piirra() {}
  62. //** Pre-defined code in the assignment **//
  63. class Nelio : public Kuvio
  64. {
  65. public:
  66. Nelio(char tekstuuri, int sivun_pituus);
  67. void Piirra();
  68. private:
  69. int sivun_pituus_;
  70. };
  71. Nelio::Nelio(char tekstuuri, int sivun_pituus) : Kuvio(tekstuuri), sivun_pituus_(sivun_pituus)
  72. {
  73. }
  74. void Nelio::Piirra()
  75. {
  76. int i, j;
  77. for(i=0; i< sivun_pituus_; i++)
  78. {
  79. for(j=0; j<sivun_pituus_; j++)
  80. {
  81. if(j == sivun_pituus_ - 1)
  82. {
  83. cout << PalautaTekstuuri() << endl;
  84. }
  85. else
  86. {
  87. cout << PalautaTekstuuri();
  88. }
  89. }
  90. }
  91. }
  92. int main()
  93. {
  94. int sivun_pituus;
  95. char tekstuuri;
  96. cout << "Anna muodostettavan neliön sivun pituus: ";
  97. cin >> sivun_pituus;
  98. cout << "Syötä merkki, jota käytetään neliön tekstuurina: ";
  99. cin >> tekstuuri;
  100. Kuvio* nelio = new Nelio(tekstuuri, sivun_pituus);
  101. nelio->Piirra();
  102. delete nelio;
  103. return 0;
  104. }
  105. //** ---------- ---------- ---------- **//
  106. ```