Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: UML

Sivun loppuun

Ben [21.05.2009 18:55:25]

#

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.

_____________________________
pelaaja
_____________________________
-rooli_:string
-nimi_:string
-pelinro_:int
____________________________
+AsetaNimi(nimi:string):void*________________|Joukkue|
+KerroNimi():string
+AsetaRooli(rooli:string):void*
+Kerr oRooli():string
+AsetaNro(nro:int):void*
+KerroNro():int
_______________________________

Toivottavasti saatte kaaviosta selvää


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.


Sain luokan tehtyä. Mitä seuraavaksi pitää tehdä?

class Pelaaja
{

public:
void AsetaNimi(string nimi);
string KerroNimi();
void AsetaRooli(string rooli);
string KerroRooli();
void AsetaNro(int nro);
int KerroNro();

private:

string rooli_;
string nimi_;
int pelinro_;
};

Mod. lisäsi/korjasi kooditagit

Teuro [21.05.2009 19:00:17]

#

Seuraavaksi olisi hyvä opetella kooditagien käyttö. No ei vaan siis seuraavaksi teet toteutukset noille metodeille ja testaat niiden toimivuuden.

Metabolix [21.05.2009 19:06:30]

#

Itse tulkitsisin kaaviosta, että void* tarkoittaisi tyyppiä void*, joka on siis aivan eri asia kuin void. Tässä ei kuitenkaan ole toiminnallisesti mitään järkeä, joten olet luultavasti tehnyt luokan aivan oikein. Onko asteriskeilla kaaviossa jokin muu merkitys?

Mutta kuten Teuro sanoi, luultavasti sinun kuuluu vielä toteuttaa nuo funktiot.

Teuro [21.05.2009 19:15:15]

#

Tuskimpa tarkoituksena on tehdä tyypitöntä osoitinmetodia, koska tehtävä näyttää olevan aivan olio-ohjelmoinnin alkeita. Ylipäätään tyypitön osoitin on melko harvinainen, kuten korkean tason kielissä tapana onkin.

Ben [21.05.2009 19:20:27]

#

asteriksella ei ole muuta merkitystä. Mitä toi void* tarkoittaa? Onks nä metodit oikein?


void Pelaaja::AsetaNimi(string nimi)

{
cout << "Nimi: " << nimi_ << "\n";

}

void Pelaaja::AsetaRooli(string rooli)

{
cout << "rooli: " << rooli_ << "\n" ;

}

void Pelaaja::AsetaNro(int nro)
{
cout << "pelinro: " << nro_ << "\n" ;

}

Teuro [21.05.2009 19:23:44]

#

Ben kirjoitti:

asteriksella ei ole muuta merkitystä. Mitä toi void* tarkoittaa? Onks nä metodit oikein?

Tyypitön osoitin pyri välttämään tämän käyttöä, mikäli mahdollista. Toteutukset ei ole lähellekään oikein. Onko muuttujan sijoitus opetettu / oletko ymmärtänyt sen merkityksen oikein? Tarkoitan siis, että noi aseta... metodit on tarkoitettu sijoitusta varten niissä ei ole sinällään tarkoitus tulostaa mitään muuta kuin ehkä tarkistamista varten. Julkaisuversiossa tulostukset tulisi ainakin riisua pois.

Ben [21.05.2009 19:41:56]

#

Joku esimerkki auttaisi asia.

Teuro [21.05.2009 19:44:12]

#

Ben kirjoitti:

Joku esimerkki auttaisi asia.

Anteeksi nimeämisen rikkominen, mutta ei tuntunut oikein tutulta tuo alaviivan oleminen nimen lopussa. Metodit olen myös tavannut aloittaa pienellä kirjaimella.

void Pelaaja::asetaNimi(std::string nimi){
	this->_nimi = nimi;
}

Ben [21.05.2009 20:19:57]

#

void Pelaaja::AsetaNro(std::int nro){
45: 	 this-> nro_ = nro;
46:

      Virhe void-määreen käytössä

    * Muuttuja (tai kenttä) AsetaNro määritelty void-tyyppiseksi.
    * Tarkista ettet ole unohtanut sulkuja (jäsen)funktion nimen perästä.

code.cpp:45: error: variable or field 'AsetaNro' declared void
code.cpp:45: error: 'int Pelaaja::AsetaNro' is not a static member of 'class Pelaaja'
code.cpp:45: error: expected unqualified-id before 'int'
code.cpp:45: error: expected ',' or ';' before '{' token

Virheilmoitus.

Teuro [21.05.2009 20:22:26]

#

Ben kirjoitti:

void Pelaaja::AsetaNro(std::int nro)

Miksi olet määritellyt int luvun std::avaruuteen, sehän on ihan perustietotyyppi.

Jätä seuraava lukematta, jos haluat ratkaista tehtävän itse.

#include <iostream>

class Pelaaja{
	private:
		std::string _rooli;
		std::string _nimi;
		int _pelinro;
	public:
		void asetaNimi(std::string nimi);
		std::string kerroNimi();
		void asetaRooli(std::string rooli);
		std::string kerroRooli();
		void asetaNro(int nro);
		int kerroNro();
};

void Pelaaja::asetaNimi(std::string nimi){
	this->_nimi = nimi;
}

std::string Pelaaja::kerroNimi(){
	return this->_nimi;
}

void Pelaaja::asetaRooli(std::string rooli){
	this->_rooli = rooli;
}

std::string Pelaaja::kerroRooli(){
	return this->_rooli;
}

void Pelaaja::asetaNro(int nro){
	this->_pelinro = nro;
}

int Pelaaja::kerroNro(){
	return this->_pelinro;
}

int main(){
	Pelaaja eka;

	eka.asetaNimi("Juha");
	std::cout << eka.kerroNimi() << std::endl;

	eka.asetaRooli("Admin");
	std::cout << eka.kerroRooli() << std::endl;

	eka.asetaNro(17);
	std::cout << eka.kerroNro() << std::endl;

	return EXIT_SUCCESS;
}

Ben [21.05.2009 20:35:50]

#

Kiitos, kyllä yritän ratkaista itse.

Metabolix [22.05.2009 14:17:55]

#

Teuro kirjoitti:

Tuskimpa tarkoituksena on tehdä tyypitöntä osoitinmetodia,

Viestini varsinainen sisältö olikin, onko tuolle *:lle annettu jokin merkitys kaaviossa vai onko se ihan koristeena vain. Loogisesti tuosta voisi kai veikata, että se tarkoittaa, että metodi muuttaa olion tilaa.

Teuro [22.05.2009 14:52:34]

#

Metabolix kirjoitti:

Viestini varsinainen sisältö olikin, onko tuolle *:lle annettu jokin merkitys kaaviossa vai onko se ihan koristeena vain. Loogisesti tuosta voisi kai veikata, että se tarkoittaa, että metodi muuttaa olion tilaa.

Ymmärsin toki pointtisi, joten kommentti oli tarkoitettu lähinnä jatkamaan tuota kirjoittamaasi epäilystä * merkin tarpeellisuudesta tässä yhteydessä. Alkuperäisessä luokkakaaviossa sitä tuskin on ollut, tai muuten kuvauksen tekijälle on sattunut lipsahdus?


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta