|
|
- ## 1 Luokan rakentaminen periyttämällä
-
- **Tehtävä:**
-
- Tässä tehtävässä sinun tulee toteuttaa luokka Auto, joka periytyy Ajoneuvo luokasta. Luokan Ajoneuvo määrittely on seuraava:
-
- ```
- class Ajoneuvo
- {
- public:
- Ajoneuvo(int ajetut, int paino, string merkki, string malli);
-
- protected:
- void Liikuta(int km);
- int PalautaAjetut();
- int PalautaPaino();
- string PalautaMerkki();
- string PalautaMalli();
-
- private:
- int ajetut_;
- int paino_;
- string merkki_;
- string malli_;
- };
- ```
-
- Ajoneuvo-luokka on melko yksinkertainen. Funktio Liikuta saa parametrina kilometrimäärän, jonka mukaisella määrällä kasvatetaan jäsenmuuttujan ajetut_ arvoa.
-
- Funktiot PalautaX palauttavat nimensä mukaiset arvot funktiota kutsuvalle ohjelman osalle. Huomaa, että luokan kaikki funktiot on määritelty protected määreellä, joten niiden palveluja voidaan hyödyntää vain Ajoneuvo-luokan aliluokissa.
-
- Sinun tehtävänäsi on laatia luokan määrittely ja jäsenfunktioden toteutus luokkaan Auto, joka perii luokan Ajoneuvo. Auto-luokka sisältää kaksi autolle ominaista jäsenmuuttujaa: string-tyypin rekisteri_nro_ ja int-tyypin matkustajat_max_, joka kuvaa autolle suurinta sallittua matkustajamäärää.
-
- Auto-luokkaan on tehtävä parametrillinen muodostin, jolle välitetään auton muodostamiseen tarvittavat tiedot (ajetut_, paino_, merkki_, malli_, rekisteri_nro_ ja matkustajat_max_). Osa parametreista välitetään Auto-luokan muodostajassa Ajoneuvo-luokan muodostajalle. Sinun tulisi kyetä päättelemään, mitkä.
-
- Muodostimen lisäksi Auto-luokkaan kirjoitetaan kaksi funktiota, joista ensimmäinen on TulostaAutonTiedot(), joka tulostaa auton tiedot mukaan lukien sen yläluokassa olevat tiedot. Funktio ei palauta arvoa, eikä ota vastaan arvoja. Tulostuksen muoto ilmenee esimerkkitulosteesta.
-
- Toinen varsinainen funktio Auto-luokassa on AjaAutoa(km), jonka tehtävänä on käyttää yliluokan palvelua Liikuta() ajettujen kilometrien kirjaamiseksi. Lisäksi funktio AjaAutoa() tulostaa näytölle ajettujen kilometrien määrän.
-
- Toteuttamaasi periytettyä luokkaa testataan seuraavalla pääohjelmalla (älä kopioi pääohjelmaa vastaukseesi):
-
- ```
- int main()
- {
- Auto pirssi(250000, 1700, "Toyota", "Carina II", "TFM-257", 5);
- pirssi.TulostaAutonTiedot();
- pirssi.AjaAutoa(25000);
- pirssi.TulostaAutonTiedot();
- return 0;
- }
- ```
-
- Example output:
-
- ```
- Merkki: Toyota
- Malli: Carina II
- Paino: 1700
- Ajetut kilometrit: 250000
- Rekisterinumero: TFM-257
- Maksimi matkustajien määrä: 5
-
- Autolla ajettu 25000 kilometriä.
-
- Merkki: Toyota
- Malli: Carina II
- Paino: 1700
- Ajetut kilometrit: 275000
- Rekisterinumero: TFM-257
- Maksimi matkustajien määrä: 5
-
- ```
-
- **Vastaus:**
-
- ```
- //** Pre-defined code in the assignment **//
- #include<iostream>
- using namespace std;
-
- class Ajoneuvo
- {
- public:
- Ajoneuvo(int ajetut, int paino, string merkki, string malli);
-
- protected:
- void Liikuta(int km);
- int PalautaAjetut();
- int PalautaPaino();
- string PalautaMerkki();
- string PalautaMalli();
-
- private:
- int ajetut_;
- int paino_;
- string merkki_;
- string malli_;
- };
-
- Ajoneuvo::Ajoneuvo(int ajetut, int paino, string merkki, string malli) : ajetut_(ajetut), paino_(paino), merkki_(merkki), malli_(malli)
- {
- }
-
- void Ajoneuvo::Liikuta(int km)
- {
- ajetut_ = ajetut_ + km;
- }
-
- int Ajoneuvo::PalautaAjetut()
- {
- return ajetut_;
- }
-
- int Ajoneuvo::PalautaPaino()
- {
- return paino_;
- }
-
- string Ajoneuvo::PalautaMerkki()
- {
- return merkki_;
- }
-
- string Ajoneuvo::PalautaMalli()
- {
- return malli_;
- }
- //** ---------- ---------- ---------- **//
-
- class Auto:public Ajoneuvo
- {
- public:
- Auto(int ajetut, int paino, string merkki, string malli, string rekisteri_nro, int matkustajat_max);
-
- void TulostaAutonTiedot();
- void AjaAutoa(int km);
-
- ~Auto();
-
- private:
- string rekisteri_nro_;
- int matkustajat_max_;
- };
-
- Auto::~Auto()
- {
- }
-
- Auto::Auto(int ajetut, int paino, string merkki, string malli, string rekisteri_nro, int matkustajat_max)
- : Ajoneuvo(ajetut, paino, merkki, malli), rekisteri_nro_(rekisteri_nro), matkustajat_max_(matkustajat_max)
- {
- }
-
- void Auto::TulostaAutonTiedot()
- {
- cout << "Merkki: " << Ajoneuvo::PalautaMerkki() << endl;
- cout << "Malli: " << Ajoneuvo::PalautaMalli() << endl;
- cout << "Paino: " << Ajoneuvo::PalautaPaino() << endl;
- cout << "Ajetut kilometrit: " << Ajoneuvo::PalautaAjetut() << endl;
- cout << "Rekisterinumero: " << rekisteri_nro_ << endl;
- cout << "Maksimi matkustajien määrä: " << matkustajat_max_ << endl << endl;
- }
-
-
- void Auto::AjaAutoa(int km)
- {
- Liikuta(km);
- cout << "Autolla ajettu " << km << " kilometriä." << endl << endl;
- }
-
- //** Pre-defined code in the assignment **//
- int main()
- {
- Auto pirssi(250000, 1700, "Toyota", "Carina II", "TFM-257", 5);
- pirssi.TulostaAutonTiedot();
- pirssi.AjaAutoa(25000);
- pirssi.TulostaAutonTiedot();
- return 0;
- }
- //** ---------- ---------- ---------- **//
- ```
|