Moro, Pitäisi tehdä tälläinen tehtävä harjoituksena, eikä
tule hommasta näköjään oikein mitään. Tullut aika pitkä tovi tuota jo mietittyä. Lähinnä tuo parametrillinen muodostin on tuossa ongelmana. eli:
Kirjoittaa pitäisi luokan määrittely ja jäsenfunktioiden toteutus luokalle öNelikulmioö, joka on abstraktin Kuvio-luokan aliluokka.
Luokan tulee sisältää seuraavat ominaisuudet:
Jäsenmuuttujat: ökorkeus_ö ja öleveys_ö
Parametrillinen muodostin, joka välittää Kuvio-luokan muodostimelle Nelikulmio-muodostimen saaman char-tyyppisen parametrin ja alustaa edellisessä mainitut jäsenmuuttujat muodostimelle välitetyin parametrein.
Funktion öPiirraö toteutus, joka piirtää nelikulmion sen jäsenmuuttujissa olevien korkeus ja leveys tietojen perusteella. Piirtämiseen käytetään yliluokan jäsenmuuttujassa olevaa ötekstuurimerkkiäö kuten esimerkkitulosteesta voidaan havaita. Piirtämiseen tarvittava tekstuuri saadaan käyttöön Kuvio-luokan öPalautaTekstuuri()ö –funktiolla.
class Kuvio { public: Kuvio(char tekstuuri); virtual void Piirra() {}; char PalautaTekstuuri(); protected : char tekstuuri_; }; Kuvio::Kuvio(char tekstuuri) : tekstuuri_(tekstuuri){ } char Kuvio::PalautaTekstuuri() { return(tekstuuri_); }
Seuraavanlaisen koodin olen saanut aikaan:
class Nelikulmio : public Kuvio { public : void Piirra (char tekstuuri_, int korkeus_, int leveys_); Nelikulmio::Nelikulmio(char tekstuuri_, int korkeus_, int leveys_); protected : char tekstuuri_; private : int korkeus_; int leveys_; }; Nelikulmio::Nelikulmio(char tekstuuri,int korkeus,int leveys) : Kuvio::Kuvio(tekstuuri_, korkeus_, leveys_) { cout << "Anna muodostettavan nelikulmion sivun korkeus: " << endl; cin >> korkeus_; cout << "Anna muodostettavan nelikulmion sivun leveys: " << endl; cin >> leveys_; cout << "Syötä merkki, jota käytetään nelikulmion tekstuurina: " << endl; cin >> tekstuuri_; }
Jotkut perusasiat ovat näköjään ihan hakusessa. Koodia voisi opetella sisentämään, virheilmoituksia voisi lukea ja tulkita (Vai käytätkö sinäkin VIOPEa? Hyi.) ja muuttujien nimistä voisi pitää vähän tarkemmin huolta, missä on alaviiva ja missä ei. Sitten voisi miettiä, mitä ihmeen järkeä on pyytää muodostimen parametreiksi korkeus ja leveys, jos ne kysytään muodostimen aikana käyttäjältä? Alkuperäisellä Kuvio-luokalla pitäisi myös olla olemassa parametriton perusmuodostin. Nelikulmio-luokassa taas ei pidä määritellä uudestaan muuttujaa tekstuuri_, koska silloin niitä on kaksi. Selvästikään Kuvion rakenninta ei voi kutsua kolmella parametrilla, koska se ottaa vain yhden. Lisäksi kutsun edessä oleva Kuvio:: on turha.
Korjasin koodin, mutta en laita sitä tähän. Suosittelen vahvasti sitä, että luet jonkin oppaan etkä yritä saada tuollaisia toimimaan puhtaasti arvailemalla. Siltä tuo ainakin vaikuttaa, niin paljon outoa siinä on.
suosittelen että käyt lukemass tämän http://www.nic.funet.fi/c opas/periytym.html
siitä luulisi olevan apua
Metabolix: Juu, Viopen tehtävä tuo oli, siksi on vähän paha noita virheilmoituksia aina lukea. Olen saanut tuon jo kyllä ratkaistua, mutta kiitos vinkeista kuitenkin.
Huomio, kaikki VIOPEn käyttäjät! Älkää koskaan yrittäkö ratkaista tehtäviä VIOPEn sisällä, jos niissä on ongelmia. Se on Tyhmää isolla T:llä. Käyttäkää jotakin kunnollista kääntäjää kirjoitusvaiheessa. Copy-Paste on keksitty, sillä saa koodin helposti omasta editoristaan VIOPEn rajoittuneeseen ja huonoon ympäristöön. VIOPEa käyttämällä oppii liikaa huonoja tapoja, kun koodin sisentäminen ei tule automaattisesti ja kirjoituslaatikko on niin pieni.
Tämä on nyt ihan off-topicia, mutta mikä se VIOPE oikein on?
Viilataan nyt vielä pilkkua sen verran, että abstrakti luokka on luokka, jolla on vähintään yksi puhtaasti virtuaalinen metodi.
Saat Kuvio-luokasta abstraktin, kun muutat rivin
virtual void Piirra() {};
riviksi
virtual void Piirra() = 0;
http://www.viope.com/
VIOPE on netissä toimiva ohjelmointikurssijärjestelmä, jota jotkut oppilaitokset käyttävät kurssien toteutukseen. Koko systeemin suunnittelussa on joitakin harmillisia ongelmia, kuten se, että virheilmoituksia ei saa suoraan näkyviin ja se, että koodi kirjoitetaan pieneen tekstilaatikkoon kunnollisen editorin sijaan.
Henkilöhoktaisesti en näe koko ajatusta mitenkään häikäisevän fiksuna, minusta ainakin asiat on helpompi oppia omalla tavallaan kuin jonkun muun keksimiä harjoituksia vääntäen. Kurssien sisältö on melko niukka, alkeita pidemmälle ei päästä tai ainakaan tietoja ei opetella soveltamaan juuri missään määrin.
Onnistuin tekemään C-kurssin if-harjoituksen ilman yhtäkään if-lausetta :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.