## 4 Erilaisten kuvioiden piirtäminen **Tehtävä:** Luvun viimeisessä tehtävässä sinun tulee laatia funktio "TulostaKuviot", joka saa parametrina osoitintaulukon edellisistä tehtävistä tuttuun Kuvio-luokkaan. Taulukko sisältää Kuvio-luokasta periytettyjä oliota, jotka on muodostettu luokista Nelio ja Nelikulmio. Funktion tulee tulostaa taulukon sisältämät oliot (yhteensä 3 oliota) esimerkkitulosteen mukaisesti hyödyntäen Nelio- ja Nelikulmio-luokkien yliluokassa (Kuvio) määriteltyä "Piirra" funktiota. Piirra-funktio ei saa parametreja, eikä se palauta arvoa. Laatimasi funktion prototyyppi on kirjoitettu valmiiksi: `void TulostaKuviot(Kuvio* kuviotaulukko[3]);` Huomaa, että ohjelman eri ajokerroilla taulukon sisältämät oliot ja niiden määrittelyluokat vaihtelevat. Polymorfismin ansiosta tällä ei ole kuitenkaan vaikutusta sinun funktiosi toteutuksessa. Example output: ``` Muodostetaanko neliö (syötä 1) vai nelikulmio (syötä muu luku): 2 Anna muodostettavan nelikulmion sivun korkeus: 3 Anna muodostettavan nelikulmion sivun leveys: 4 Syötä merkki, jota käytetään nelikulmion tekstuurina: % Muodostetaanko neliö (syötä 1) vai nelikulmio (syötä muu luku): 1 Anna muodostettavan neliön sivun pituus: 2 Syötä merkki, jota käytetään neliön tekstuurina: E Muodostetaanko neliö (syötä 1) vai nelikulmio (syötä muu luku): 1 Anna muodostettavan neliön sivun pituus: 6 Syötä merkki, jota käytetään neliön tekstuurina: & Muodostetut kuviot piirrettynä: %%%% %%%% %%%% EE EE &&&&&& &&&&&& &&&&&& &&&&&& &&&&&& &&&&&& ``` **Vastaus:** ``` //** Pre-defined code in the assignment **// #include using namespace std; class Kuvio { public: Kuvio(char tekstuuri); char PalautaTekstuuri(); virtual void Piirra() = 0; private: char tekstuuri_; }; Kuvio::Kuvio(char tekstuuri) : tekstuuri_(tekstuuri) { } char Kuvio::PalautaTekstuuri() { return tekstuuri_; } class Nelio : public Kuvio { public: Nelio(char tekstuuri, int sivun_pituus); void Piirra(); private: int sivun_pituus_; }; Nelio::Nelio(char tekstuuri, int sivun_pituus) : Kuvio(tekstuuri), sivun_pituus_(sivun_pituus) { } void Nelio::Piirra() { int i, j; for (i=0; i> valinta; if (valinta == 1) { cout << "Anna muodostettavan neliön sivun pituus: "; cin >> sivun_leveys; cout << "Syötä merkki, jota käytetään neliön tekstuurina: "; cin >> tekstuuri; kuviot[i] = new Nelio(tekstuuri, sivun_leveys); } else { cout << "Anna muodostettavan nelikulmion sivun korkeus: "; cin >> sivun_korkeus; cout << "Anna muodostettavan nelikulmion sivun leveys: "; cin >> sivun_leveys; cout << "Syötä merkki, jota käytetään nelikulmion tekstuurina: "; cin >> tekstuuri; kuviot[i] = new Nelikulmio(tekstuuri, sivun_korkeus, sivun_leveys); } } cout << endl << "Muodostetut kuviot piirrettynä:" << endl << endl; TulostaKuviot(kuviot); return 0; } //** ---------- ---------- ---------- **// void TulostaKuviot(Kuvio* kuviotaulukko[3]) { for (int i = 0; i < 3; i++) { kuviotaulukko[i]->Piirra(); cout << endl; } } ```