|
|
|
|
Strumenti |
02-02-2016, 19:01 | #1 |
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
[[C++] Ereditarietà e polimorfismo - problema
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); virtual 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? Ultima modifica di mistergks : 03-02-2016 alle 05:49. |
03-02-2016, 02:49 | #2 | |
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13826
|
Quote:
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
__________________
GPU Compiler Engineer |
|
03-02-2016, 05:52 | #3 |
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
[[C++] Ereditarietà e polimorfismo - problema
È un esercizio per verificare l'uso del polimorfismo ed ereditarietà...
Ovviamente la funzione calcolaValore è virtual... Avevo dimenticato di mettere virtual Il valore c'è scritto che dipende dal ruolo e dall'età ma non è richiesto il calcolo. Comunque l'ho fatto così ad un esame universitario e sono stato bocciato. Per questo sto chiedendo qui |
03-02-2016, 11:30 | #4 |
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1816
|
Mi verrebbe da dire che un Difensore non e' un Giocatore (anche se colloquialmente lo e'), ma un Ruolo di un Giocatore.
Quindi secondo me Giocatore non dovrebbe avere metodi virtuali, ma contenere un oggetto di Tipo ruolo (che sara' poi specializzato in Difensore, Centrocampista etc) a cui delega il calcolo del valore.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
03-02-2016, 23:47 | #5 |
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
Un oggetto di tipo ruolo cioè un enum ruolo?
|
06-02-2016, 20:16 | #6 |
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
Up
|
07-02-2016, 14:57 | #7 |
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1816
|
Pensavo ad un oggetto di tipo ruolo, non un enum, ad esempio
Codice:
#ifndef GIOCATORE_h #define GIOCATORE_H class Giocatore{ private: string nome; int eta; int valore; Ruolo* ruolo; public: string getNome() const; int getEta() const; int getValore() const; void setNome(string n); void setEta(int e); void setValore(int v); int calcolaValore(); }; #endif // GIOCATORE_h #ifndef RUOLO_h #define RUOLO_h #ifndef GIOCATORE_h #define GIOCATORE_H class Ruolo{ public: virtual int calcolaValore(int eta)=0; }; #endif ......... class Difensore: public Ruolo { ........ };
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:47.