Pregunta 3 - Constructors, destructors i fitxers · Metodologia de la Programació UAB 2018
Tema: Constructors, destructors i fitxers · Del examen Examen Primer Parcial Curs 2018-2019 (2018)
Enunciado
Context
Aquest examen avalua els conceptes de disseny orientat a objectes en C++ mitjançant la creació i gestió d'una lliga de fins a 20 superherois. Es parteix de la declaració bàsica de la classe SuperHeroi:
class SuperHeroi
{
public:
SuperHeroi();
void setNom(string nom) { m_nom = nom; }
void setVelocitat(int velocitat) { m_velocitat = velocitat; }
void setPoder(const string& poder) { m_poder = poder; }
void setVida(int vida) { m_vides = vida; }
void setForca(int forca) { m_forca = forca; }
string getNom() const { return m_nom; }
int getVelocitat() const { return m_velocitat; }
int getVides() const { return m_vides; }
string getPoder() const { return m_poder; }
int getForca() const { return m_forca; }
private:
string m_nom;
int m_velocitat;
string m_poder;
int m_vides;
int m_forca;
};
Pregunta 3 (Constructors i Fitxers - 2,5 punts)
Desenvolupeu el codi en C++ dels següents mètodes de la classe LligaSuperHerois:
a)
Constructor a partir d'un array [1 punt]: rep un array de superherois i la seva mida (< 20), i inicialitza la lliga amb aquests elements.
b)
Carregar la llista des de fitxer [1,5 punts]: llegeix superherois d'un fitxer de text línia a línia (format: nom velocitat poder vides força). La lectura s'ha d'aturar immediatament si es trenca el criteri d'ordenació decreixent (comprovat amb >) o s'assoleix el límit de capacitat.

Solución
Según los criterios oficiales de corrección
a. Constructor a partir d'un array: rep un array de superherois i la seva mida (< 20), i inicialitza la lliga amb aquests elements.
Solución: ```cpp LligaSuperHerois::LligaSuperHerois(const SuperHeroi llista[], int nElements) { if (nElements > MAX_SUPERHEROIS) m_nSuperherois = MAX_SUPERHEROIS; else m_nSuperherois = nElements; for (int i = 0; i < m_nSuperherois; ++i) { m_superherois[i] = llista[i]; } } ```
b. Carregar la llista des de fitxer: llegeix superherois d'un fitxer de text línia a línia (format: nom velocitat poder vides força). La lectura s'ha d'aturar immediatament si es trenca el criteri d'ordenació decreixent (comprovat amb >) o s'assoleix el límit de capacitat.
Solución: ```cpp bool LligaSuperHerois::carregarDeFitxer(const string& nomFitxer) { ifstream fitxer(nomFitxer); if (!fitxer.is_open()) return false; m_nSuperherois = 0; string nom, poder; int velocitat, vides, forca; bool ordreCorrecte = true; while (m_nSuperherois < MAX_SUPERHEROIS && fitxer >> nom >> velocitat >> poder >> vides >> forca && ordreCorrecte) { SuperHeroi sh; sh.setNom(nom); sh.setVelocitat(velocitat); sh.setPoder(poder); sh.setVida(vides); sh.setForca(forca); if (m_nSuperherois > 0) { if (!(m_superherois[m_nSuperherois - 1] > sh)) { ordreCorrecte = false; } } if (ordreCorrecte) { m_superherois[m_nSuperherois] = sh; m_nSuperherois++; } } fitxer.close(); return true; } ```
La explicación paso a paso, hecha con IA, es Premium. Premium
Resuélvelo aquí mismo: corrección automática, pistas y solución paso a paso.
‹ Exercici 3.a - Constructors, destructors i fitxers · 2024 · Exercici 3.a - Fitxers · 2017 ›