C++ fundamentals through coding exercises
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

3.8 KiB

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