## 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 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; } //** ---------- ---------- ---------- **// ```