Quote:
Originariamente inviato da mistergks
Sto svolgendo un esercizio in C++ per la programmazione orientata agli oggetti.
Traccia:
Un giocatore ha nome, etā e un valore che dipende dal ruolo del giocatore e dall'etā.
Progettare la classe Giocatore fornendo solo la definizione (Giocatore.h) tenendo presente che il sistema deve essere flessibile all'aggiunta di un nuovo ruolo.
Inserire nella classe Giocatore tutti i metodi che si ritengono opportuni motivandone l'aggiunta.
Ho risolto cosi':
file Giocatore.h
Codice:
#ifndef GIOCATORE_h
#define GIOCATORE_H
class Giocatore{
protected:
string nome;
int eta;
int valore;
public:
string getNome() const;
int getEta() const;
int getValore() const;
void setNome(string n);
void setEta(int e);
void setValore(int v);
int calcolaValore()=0;
};
#endif // GIOCATORE_h
file Difensore.h
Codice:
#ifndef DIFENSORE_H
#define DIFENSORE_H
#include "Giocatore.h"
class Difensore: public Giocatore{
public:
int calcolaValore(){ return v;}
};
#endif // DIFENSORE_H
In pratica ho creato la classe Giocatore come classe astratta e ho messo come metodo virtuale puro calcolaValore() che ho poi definito nella classe Difensore che eredita Giocatore.
Il mio dubbio č va bene questa scelta?
L'ereditarietā č public?
|
Onestamente io non creerei mai un nuovo tipo e userei un metodo virtuale per fare una cosa del genere ...
Detto questo pero' questo e' un esercizio ... a volte bisogna capire anche cosa l'esercizio vuole che tu faccia.
Se credi che nella risoluzione tu debba almeno usare una funzione virtuale e creare almeno una classe derivata allora la tua soluzione puo' tenere (anche se mi pare che il valore dipenda solo dal ruolo e non dal ruolo e l'eta') .
Detto questo se e' cosi' e' un esercizio del cappero