## 1 Joukkue koostuu pelaajista **Tehtävä:** Alla näet UML-kaavion, joka on osa suurempaa oliosuunnitelmaa. Sinun tehtävänäsi on toteuttaa kaavion mukainen luokka "Pelaaja". Kuten kuvasta voidaan nähdä, Joukkue-luokka koostuu pelaajista. Tämä ei kuitenkaan vaikuta sinun osuuteesi ohjelmiston toteutuksessa - riittää, kun osaat kirjoittaa luokan UML-kaavion osoittamalla tavalla. Ohessa joitakin huomioita, joita tarvitset kaavion tulkinnassa: - Merkit "-" ja "+" jäsenten edessä määrittelevät jäsenen näkyvyyden. (+ = public, - = private) - Notaatiossa esitetään ensin jäsenmuuttujan tai parametrin nimi ja tämän jälkeen tietotyyppi. - Jäsenfunktioiden paluuarvot näkyvät notaatiossa funktioiden otsikoiden perässä kaksoispisteellä eroteltuna. ``` +---------------------------------+ | Pelaaja | +---------------------------------+ +--------+ |- rooli_: string | |Joukkue +-------------------------+- nimi_ : string | |--------| 1 40 |- pelinro_: int | +--------+ +---------------------------------+ |+ AsetaNimi(nimi:string):void* | |+ KerroNimi():string | |+ AsetaRooli(rooli:string):void* | |+ KerroRooli():string | |+ AsetaNro(nro:int):void* | |+ KerroNro():int | +---------------------------------+ ``` Example output: ``` Nimi: Matti Meikäläinen Rooli: Maalivahti Pelinumero: 1 Nimi: Kale Kokkola Rooli: Vaihtopenkin lämmittäjä Pelinumero: 82 Nimi: Simo Supermies Rooli: Hyökkääjä Pelinumero: 99 ``` **Vastaus:** ``` #include using namespace std; class Pelaaja { public: void AsetaNimi(string nimi) { nimi_ = nimi; } string KerroNimi() { return nimi_; } void AsetaRooli(string rooli) { rooli_ = rooli; } string KerroRooli() { return rooli_; } void AsetaNro(int nro) { pelinro_ = nro; } int KerroNro() { return pelinro_; } private: string rooli_; string nimi_; int pelinro_; }; //** Pre-defined code in the assignment **// class Joukkue { public: void LisaaPelaaja(string nimi, string rooli, int nro); void TulostaJoukkue(); Joukkue(); ~Joukkue(); private: Pelaaja* pelaajat[30]; int pelaajia_; }; Joukkue::Joukkue() : pelaajia_(0) { int i; for (i=0; i<30; i++) { pelaajat[i] = NULL; } } Joukkue::~Joukkue() { int i; for (i=0; i<30; i++) { delete pelaajat[i]; } } void Joukkue::LisaaPelaaja(string nimi, string rooli, int nro) { pelaajat[pelaajia_] = new Pelaaja(); pelaajat[pelaajia_]->AsetaNimi(nimi); pelaajat[pelaajia_]->AsetaRooli(rooli); pelaajat[pelaajia_]->AsetaNro(nro); pelaajia_++; } void Joukkue::TulostaJoukkue() { int i; for(i=0; i<30; i++) { if(pelaajat[i] != NULL) { cout << "Nimi: " << pelaajat[i]->KerroNimi() << endl; cout << "Rooli: " << pelaajat[i]->KerroRooli() << endl; cout << "Pelinumero: " << pelaajat[i]->KerroNro() << endl << endl; } } } int main() { Joukkue VioPa; VioPa.LisaaPelaaja("Matti Meikäläinen", "Maalivahti", 1); VioPa.LisaaPelaaja("Kale Kokkola", "Vaihtopenkin lämmittäjä", 82); VioPa.LisaaPelaaja("Simo Supermies", "Hyökkääjä", 99); VioPa.TulostaJoukkue(); return 0; } //** ---------- ---------- ---------- **// ```