|
|
- ## 2 Auto-Henkilo -assosiaatio
-
- **Tehtävä:**
-
- Tässä tehtävässä on valmiiksi kirjoitettu luokka Auto, joka sisältää kaksi jäsenmuuttujaa. Ensimmäinen on string-tyypin muuttuja merkki_, joka kuvaa auton merkkiä. Toinen muuttujista on ajetut_km_, joka kuvaa autolla ajettujen kilometrien määrää.
-
- Edellisten lisäksi Auto-luokassa on:
-
- - Parametrillinen muodostin, joka välittää muodostettavalle auto-oliolle merkin ja ajettujen kilometrien määrän annetussa järjestyksessä.
-
- - Funktio Liiku, joka ottaa vastaa kokonaislukutyypin arvon, jolla imaistaan liikuttavien kilometrien määrää. Funktio lisää vastaanotetun arvon muuttujaan ajetut_km_ ja tulostaa esimerkkitulosteen mukaisen tekstin näytölle.
-
- - Funktio KerroAjetutKm, joka sitä kutsuttaessa tulostaa autolla ajettujen kilometrien määrän.
-
- Sinun tehtävänäsi on muodostaa Henkilo-luokka, jolla on osoittimen avulla toteutettu assosiaatiosuhde Auto-luokkaan. Henkilo-luokka tarvitsee kaksi jäsenmuuttujaa: henkilön nimen (string) ja osoittimen Auto-luokan olioihin. Edellisten jäsenmuuttujien lisäksi Henkilo-luokkaan pitää määritellä ja toteuttaa seuraavat palvelut:
-
- - Parametrillinen muodostin, joka muodostaa uuden henkilön ja sijoittaa olion jäsenmuuttujiin parametrina saadut nimen ja osoittimen tiettyyn auto-olioon.
-
- - Funktio AjaAutoa, joka saa kokonaislukutyypin parametrin, jolla ilmaistaan ajettavien kilometrien määrän. AjaAutoa-funktion tehtävänä on kutsua Auto-luokan Liiku funktiota, jolle ajettavien kilometrien lukumäärä välitetään.
-
- - Funktio VaihdaAutoa, joka saa parametrina osoittimen uuteen auto-olioon ja jonka funktio vaihtaa entisen auton tilalle. Huomaa, että vanhaa auto ei tarvitse, eikä pidä tuhota.
-
- Pääohjelma, jossa vastaustasi testataan, muodostaa kaksi autoa ja yhden henkilön. Henkilö ajaa ensin toista autoa, vaihtaa autoa ja ajaa uudella autolla. Lisäksi auto-oliota pyydetään tulostamaan ajettuja kilometrejä luokkien välisen assosiaation toimimisen toteamiseksi.
-
- Example output:
-
- ```
- Toyota Corolla DX merkkisellä autolla on ajettu 25000 km
- Wrooom...1000 kilometriä ajettu.
- Toyota Corolla DX merkkisellä autolla on ajettu 26000 km
- Ferrari F50 merkkisellä autolla on ajettu 1500 km
- Wrooom...20000 kilometriä ajettu.
- Ferrari F50 merkkisellä autolla on ajettu 21500 km
- ```
-
- **Vastaus:**
-
- ```
- //** Pre-defined code in the assignment **//
- #include<iostream>
- using namespace std;
-
- class Auto
- {
- public:
- void Liiku(int km);
- void KerroAjetutKm();
- Auto(string merkki, int ajetut_km);
-
- private:
- string merkki_;
- int ajetut_km_;
- };
-
- Auto::Auto(string merkki, int ajetut_km) : merkki_(merkki), ajetut_km_(ajetut_km)
- {
- }
-
- void Auto::Liiku(int km)
- {
- ajetut_km_ = ajetut_km_ + km;
- cout << "Wrooom..." << km << " kilometriä ajettu." << endl;
- }
-
- void Auto::KerroAjetutKm()
- {
- cout << merkki_ << " merkkisellä autolla on ajettu " << ajetut_km_ << " km" << endl;
- }
- //** ---------- ---------- ---------- **//
-
- class Henkilo
- {
- public:
- Henkilo(string nimi, Auto* car);
- void AjaAutoa(int km);
- void VaihdaAutoa(Auto* car);
- private:
- string nimi_;
- Auto* car_;
- };
-
- Henkilo::Henkilo(string nimi, Auto* car) : nimi_(nimi), car_(car)
- {
- Auto* car_ = car;
- nimi_ = nimi;
- }
-
- void Henkilo::AjaAutoa(int km)
- {
- car_->Liiku(km);
- }
-
- void Henkilo::VaihdaAutoa(Auto* car)
- {
- car_ = car;
- }
-
- //** Pre-defined code in the assignment **//
- int main()
- {
- Auto* deksteri = new Auto("Toyota Corolla DX", 25000);
- Auto* ferrari = new Auto("Ferrari F50", 1500);
-
- Henkilo* autoilija = new Henkilo("James", deksteri);
-
- deksteri->KerroAjetutKm();
- autoilija->AjaAutoa(1000);
- deksteri->KerroAjetutKm();
-
- ferrari->KerroAjetutKm();
- autoilija->VaihdaAutoa(ferrari);
- autoilija->AjaAutoa(20000);
- ferrari->KerroAjetutKm();
- return 0;
-
- }
- //** ---------- ---------- ---------- **//
- ```
|