Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 4.0

Tehtävät

  1. Suunnittele luokkamalli koneelle. Kone koosttu luokista Toimilaite ja Prosessi. Toimilaite koostaa luokan Liikeanturi ja VoimaAnturi. Nämä luokat taas perivät luokan Anturi. Tee luokista ensin UML-malli  Dia:lla ja sitten Qt:llä.
  2. Muokatkaa tunneilla tehtyä esimerkkiä Tietokone-luokasta siten, että lisäätte luokkaan kaksi uutta jäsenmuuttujaa (ominaisuutta) ja mainiin toisen olion Tietokone-luokasta, määrittäen myös sen ominaisuudet.
  3. Esitelkää yksi luokka, jossa on privaatti jäsenmuuttuja, sekä yksi julkinen metodi.
  4. Mallintakaa CAuto-luokka, jossa tulee olla vähintään 5 jäsenmuuttujaa ja niille asetus ja tulostusfunktiot.
    Lisäksi kirjoittakaa muodostin, jossa antaa alkuarvot jäsenmuuttujille.
    Funktioiden ja muuttujien tulee olla public-tyyppisiä.
  5. Tehkää yksi luokka (siis esittely ja toteutus metodeille), jossa on yksi privaatti jäsenmuuttuja, sekä yksi parametriton julkinen metodi.
    Luokaa luokasta olio main():ssa ja kutsukaa metodia.
    Metodin toteutuksessa voi esim. tulostaa tekstin.
  6. Tehkää yksi luokka, jossa on privaatti jäsenmuuttuja.
    Kirjoittakaa luokalle parametriton muodostin, jossa jäsenmuuttujalle annetaan (alku)arvo.
    Luokaa luokasta olio main():ssa.

...

  1. Tehkää luokka, jossa on yksi julkinen metodi, jolla on bool-tyyppinen parametri.
    Riippuen tämän parametrin arvosta, tulostakaa eri tekstit (esim. if/else-rakenteen avulla)
  2. Tehkää luokka, jossa on kolme privaattia jäsenmuuttujaa, sekä PARAMETRILLINEN muodostin, jossa kaikille kolmelle muuttujalle annetaan arvo.
    Luo luokasta olio main():ssa.
  3. Muuttakaa CAuto-luokkaa siten, että kaikki muuttujat sekä TulostaMerkki(), TulostaMalli(), jne. -funktiot ovat private-tyyppisiä.
    Kirjoittakaa public-tyyppinen Tulosta()-funktio, joka kutsuu private-tyyppisiä Tulosta()-funktioita.
    Tulostakaa auton tiedot main():sta.
  4. Lisätkää CAuto-luokkaan vähintään kaksi ominaisuutta (valmistusvuosi, väri jne) ja tehkää niille asetus- ja tulostusmetodit.
    Muuttakaa Tulosta()-metodia siten, että se kutsuu myös näitä lisättyjä metodeja.
  5. Tehkää kokonaan uusi luokka, jossa on min. 2 muuttujaa ja näille asetusfunktiot.
    Lisätkää luokkaan muodostin, jolla EI OLE parametreja.
    Alustakaa muuttujat muodostimessa oletusarvoihin.
  6. Muokatkaa Kopioikaa koostuminen-sivulla annettu esimerkki 2 ja siirtäkää jokainen luokka omaan tiedostoonsa.
    Tätä ei tarvitse saada kääntymään!
  7. Tehkää seuraavat jäsenfunktiot:
    CTietokone-luokalle int Suorita(int, int, char);
    CProsessori-luokalle int Laske(int, int, char); annettua esimerkkiä 2.
    Luokkien metodeilla tulee olla toteutukset, joiden avulla voidaan suorittaa seuraavat laskutoimitukset: + - * /.
    Tehkää operaatiot int-tyyppisille muuttujille.
    Laskutoimitukset pitää tulostaa ruudulle, tyyliin 2 + 3 = 5.
    Vihje: käyttäkää yhteenlasku, vähennyslasku, kertolasku ja jakolasku.
    Ideana on että main:ssa voidaan antaa seuraava funktiokutsu: pc.Suorita(10, 2, '+'); Tämä funktio puolestaan kutsuu CProsessori-luokan funktiota Laske(), joka palauttaa paluuarvona laskennan tuloksen. Kutsuketju siis on seuraava: main()>Suorita()>Laske().
    Vihje: voitte käyttää CProsessori-luokan Laske()-metodissa switch-case rakennetta
    Jokainen luokka tulee on omassa tiedostossaan.
    HUOM. Kun luotte luokkia, niin älkää käyttäkö Add/Add Class -palvelua, vaan luokaa tyhjä .h tai .cpp -tiedosto ja kirjoittakaa kaikki käsin. Ajatuksella.
  8. Tehkää auto-luokka (tai käyttäkää jo olemassa olevaa), jossa on protected-määreellä väh. kaksi metodia ja viisi muuttujaa (renkaiden lkm, jne).
    Periyttäkää auto-luokasta jokin luokka (esim. linja-auto, rekka, jne).
    Lisätkää perilliseen väh. kaksi uutta muuttujaa ja metodia.
    Tehkää perilliseen Aseta(...) metodi, jolla on asetetaan arvo kaikille perillisen ja vanhemman muuttujille.
    Tehkää perilliseen Tulosta() metodi, joka tulostaa kaikkien perillisen ja vanhemman muuttujien arvot.
    Asettakaa muodostimessa auto luokan renkaiden lukumääräksi 4. Muuttakaa tämä lukumäärä vastaamaan perillisen renkaiden lukumäärää.
    Luokaan main():iin olio perillisestä (rekka, linja-auto, tjm) ja kutsukaa vanhemmassa esitettyjä metodeita.
  9. case-rakennetta.
  10. Lisätkää vielä CRAM-luokalle void Talleta(int); ja int Palauta(); -funktiot ja tehkää toteutukset näille.
    Käyttäkää CTietokone-luokan Suorita()-funktiossa näitä tallentaaksenne laskettu arvo 'muistiin'.
  11. Kopioikaa CElain ja CKissa luokat Periytyminen-sivun esimerkki 1:stä.
    Tehkää toteutukset jäsenfunktioille.
    Lisätkää main()-funktio ja luokaa siellä olio CKissa-luokasta.
    Testatkaa mitä jäsenfunktioita voitte kutsua.
  12. (kertausta)
    -Tehkää luokka, jossa on kaksi privaattia jäsenmuuttujaa, näille julkiset asetusmetodit asetus- sekä privaatit tulostametodittulostafunktiot.
    - Lisäksi tehkää luokkaan julkinen Tulosta()-metodifunktio, joka puolestaan kutsuu privaatteja tulostametodejatulostafunktioita.
    - Luokaa luokasta olio, asettakaa muuttujille jotkin arvot ja tulostakaa ne.
    HUOM: Tässä tehtävässä tehty luokka on enkapsuloitu...
    !!! TEHKÄÄ UUSI LUOKKA !!!
  13. (kertaustaTämä tehdään tehtävän 15 pohjalta)
    -Tehkää kaksi luokkaa, joista toinen perii toisen.
    -Tehkää vanhempi-luokkaan Lisätkää luokka, joka perii tehtävässä 15 tekemäsi luokan.
    Tehkää perilliseen kaksi protected-tyyppistä muuttujaa ja metodia.
    -Kutsukaa näitä perillisen metodeista, joita puolestaan kutsutaan main():sta.
    !!! TEHKÄÄ UUDET LUOKAT !!!niille tulostafunktiot.
    Lisätkää vielä julkinen Tulosta()-funktio (tätä kutsutaan funktion ylikirjoittamiseksi),
    joka kutsuu vanhemman Tulosta()-funktiota perillisen tulostafunktioiden lisäksi (kts. periytyminen-sivun lopusta).
    Luokaa perillisestä olio mainissa ja kutsukaa Tulosta-funktiota.
  14. Tehkää luokka, jossa on funktio, joka ottaa 2 parametria. Määritä nämä parametrit vakioiksi (const) ja testatkaa mitä tapahtuu jos niitä yrittää muuttaa.
  15. Tehkää luokka, jossa on yksi vakio jäsenmuuttuja (const), alustakaa se.
    Lisätkää luokkaan jäsenfunktio, joka käyttää vakio-jäsenmuuttujaa (esim. tulostaa sen).
  16. Tehkää kaksi luokkaa joista toinen perii toisen.
    Kirjoittakaa molempiin muodostimet, joissa vaikka tulostatte tekstin.
    Luokaa olio perillisestä ja selvittäkää vastaus kysymykseen: "Kutsutaanko vanhemman muodostinta ja missä vaiheessa?"
  17. Tehkää kaksi luokkaa, (kertausta)
    -Tehkää kaksi luokkaa CAuto ja CMoottori, joista CAuto koostuu CMoottorista.
    - Kutsukaa CMoottori-luokan metodia CAuto-luokan metodista, jota puolestaan kutsutaan main():sta.
    Luokaa olio CAutosta ja selvittäkää vastaus kysymykseen: "Kutsutaanko CMoottorin muodostinta ja missä vaiheessa?"
  18. Tehkää luokka, jossa on kolme vakiota (const) jäsenmuuttujaa (huom! taulukot eivät toimi!) ja tehkää luokasta olio mainissa.
  19. Luokaa kaksi luokkaa, joista toinen perii toisen.
    Tehkää vanhempi-luokkaan vähintään yksi virtuaalinen funktio.
    Ylikirjoittakaa tämä virtuaalinen funktio perillisessä.
    Käyttäkää perillistä sen luokasta tehdyn olion kautta sekä vanhemman luokan osoittimen kautta.
    Testatkaa mitä tapahtuu, jos muutatte virtuaalisen funktion tavalliseksi funktioksi (eli poistatte sanan virtual funktion määrittelyn edestä).
  20. Luokaa vanhempi-luokka, jossa on vähintään yksi aito virtuaalinen funktio.
    Luokaa kaksi luokkaa, jotka perivät ja toteuttavat vanhempi-luokan.
    Luokaa CKokoelma-luokka ja lisätkää siihen vanhempi-luokan tyyppinen osoitintaulukko. Kts mallia Abstraktit luokat esimerkki 3
    Luokaa main():ssa CKokoelma-luokasta olio ja perillisistä useita olioita.
    Viekää oliot CKokoelma-luokkaan ja tallentakaa ne osoitintaulukkoon.
    Varmistukaa, että osoitintaulukko toimii, esim kutsumalla olioiden metodeita, tai jollain muulla tavalla.

Älkää vielä tehkö näitä, ne tulevat muuttumaan:

  1. !! TEHKÄÄ UUDET LUOKAT !!!(kertausta)
    -Tehkää yksi luokka, jossa on privaatti jäsenmuuttuja sekä julkinen metodi, joka palauttaa jäsenmuuttujan arvon.
    - Tehkää lisäksi parametriton muodostin, jossa jäsenmuuttujalle annetaan alkuarvo.
    - Luokaa olio main():ssa ja kutsukaa metodia, joka palauttaa jäsenmuuttujan arvon
    - Tulostakaa eri tekstit if/else -rakenteen avulla, riippuen palautetusta arvosta.
    !!! TEHKÄÄ UUDET LUOKAT !!!
  2. -Tehkää luokka, jossa on kolme jäsenmuuttujaa.
    -Kirjoittakaa luokkaan julkinen metodi TeeJotain(), jolla on kaksi parametria, joiden arvot kopioidaan kahdelle jäsenmuuttujalle.
    -Kirjoittakaa luokkaan lisäksi luokkaan lisäksi privaatti parametriton metodi parametriton metodi TeeJotain(), jossa alustetaan kolmas jäsenmuuttuja alkuarvoon.
    -Kutsukaa parametrillisesta funktiosta parametritonta metodiaparametritonta metodia.
    -Luokaa main():ssa olio luokasta ja kutsukaa parametrillista metodiaparametrillista metodia.
    Huom! Molempien metodien nimi tulee olla TeeJotain()!-Tehkää luokka, jossa on yksi vakio jäsenmuuttuja (const), alustakaa se.
    -Lisätkää luokkaan metodi, joka käyttää vakio-jäsenmuuttujaa.
  3. -Tehkää luokka, jossa on kaksi vakiometodia.
    -Kutsukaa näitä metodeita main():sta, const-tyyppisen olion kautta.
  4. -Tehkää main():iin kaksi saman tyyppistä muuttujaa, joilla on eri arvot.
    -Lisätkää osoitin, joka on samaa tyyppiä kuin muuttujat.
    -Tulostakaa molempien muuttujien arvot osoittimen kautta.
  5. -Kirjoittakaa FUNKTIO, joka ottaa parametrina osoittimen
    -Muuttakaa annetun osoittimen osoittamaa arvoa
    -Tarkistakaa (esim debuggerilla tai ruudulle tulostamalla) että arvo muuttuu.
  6. -Kirjoittakaa funktio, jolla on parametreina kaksi (saman tyyppistä) osoitinta.
    -Vaihtakaa osoittimien arvot keskenään;
    -Tarkistakaa (esim debuggerilla tai ruudulle tulostamalla) että arvot vaihtuivat.
  7. -Luokaa kolmen alkion osoitintaulukko.
    -Luokaa kolme muuttujaa (samaa tyyppiä kuin osoitintaulukko).
    -Pistäkää kaikki taulukon osoittimet osoittamaan muuttujiin.
    -Tarkistakaa (esim debuggerilla tai ruudulle tulostamalla) että osoittimet toimivat.
  8. -Luokaa kaksi luokkaa, joista toinen perii toisen.
    -Tehkää vanhempi-luokkaan vähintään yksi virtuaalinen funktio.
    -Ylikirjoittakaa tämä virtuaalinen funktio perillisessä.
    -Käyttäkää perillistä sen luokasta tehdyn olion kautta sekä vanhemman luokan osoittimen kautta.
    -Testatkaa mitä tapahtuu, jos muutatte virtuaalisen funktion tavalliseksi funktioksi (eli poistatte sanan virtual funktion määrittelyn edestä).
  9. -Luokaa vanhempi-luokka, jossa on vähintään yksi aito virtuaalinen funktio.
    -Luokaa kaksi luokkaa, jotka perivät ja toteuttavat vanhempi-luokan.
    -Luokaa CKokoelma-luokka ja lisätkää siihen vanhempi-luokan tyyppinen osoitintaulukko.
    -Luokaa main():ssa CKokoelma-luokasta olio ja perillisistä useita olioita.
    -Viekää oliot CKokoelma-luokkaan ja tallentakaa ne osoitintaulukkoon.
    -Varmistukaa, että osoitintaulukko toimii, esim kutsumalla olioiden funktioita, tai jollain muulla tavalla.