Exercici 2 · Metodologia de la Programació UAB 2017

Tema: Classes contenidor amb arrays estàtics i composició · Del examen Examen parcial curs 2017-2018 (Versió 1) (2017)

Enunciado

Exercici 2 (4 punts). Disseny i implementació de la classe Client

Definiu i implementeu una classe anomenada Client per gestionar les dades bàsiques d'un client (únicament el seu nom) i el conjunt de les seves factures mitjançant instàncies de la classe Factura de l'exercici anterior. Es garanteix que un client no tindrà mai més de 100 factures.

Observacions:

Definiu com a inline els mètodes que consideri oportú.

Marqueu degudament amb const mètodes i paràmetres segons correspongui.

a)

Declareu la classe indicant els atributs privats necessaris i les capçaleres de tots els mètodes públics. Incloeu també els consultors i modificadors addicionals que es requereixin per a l'exercici 3.

b)

Implementeu el constructor per defecte de forma que inicialitzi el client i l'estat del seu registre de factures (si no s'ha definit inline a la declaració).

c)

Declareu i implementeu el mètode afegeixFactura, el qual rep com a paràmetre un objecte Factura i l'afegeix a la col·lecció interna mantenint l'ordre creixent determinat per l'operador <.

d)

Declareu i implementeu el mètode importTotal, encarregat de calcular i retornar la suma acumulada de l'import de totes les factures associades al client.

Enunciado: Exercici 2 · Metodologia de la Programació UAB 2017

Solución

Según los criterios oficiales de corrección

a. Declareu la classe indicant els atributs privats necessaris i les capçaleres de tots els mètodes públics. Incloeu també els consultors i modificadors addicionals que es requereixin per a l'exercici 3.

Solución: ```cpp class Client { public: Client() { m_nFactures = 0; m_nom = ""; } string getNom() const { return m_nom; } int getNFactures() const { return m_nFactures; } void afegeixFactura(const Factura &f); float importTotal(); private: static const int MAX_FACTURES = 100; string m_nom; Factura m_factures[MAX_FACTURES]; int m_nFactures; }; ```

b. Implementeu el constructor per defecte de forma que inicialitzi el client i l'estat del seu registre de factures.

Solución: ```cpp Client() { m_nFactures = 0; m_nom = ""; } ```

c. Declareu i implementeu el mètode afegeixFactura, el qual rep com a paràmetre un objecte Factura i l'afegeix a la col·lecció interna mantenint l'ordre creixent determinat per l'operador <.

Solución: ```cpp void Client::afegeixFactura(const Factura &f) { if (m_nFactures < MAX_FACTURES) { bool trobat = false; int i = 0; while ((i < m_nFactures) && (!trobat)) { if (f < m_factures[i]) trobat = true; else i++; } for (int j = (m_nFactures - 1); j >= i; j--) m_factures[j + 1] = m_factures[j]; m_factures[i] = f; m_nFactures++; } } ```

d. Declareu i implementeu el mètode importTotal, encarregat de calcular i retornar la suma acumulada de l'import de totes les factures associades al client.

Solución: ```cpp float Client::importTotal() { float import = 0; for (int i = 0; i < m_nFactures; i++) import += m_factures[i].getImport(); return import; } ```

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.

‹ Pregunta 4 · 2018 · Exercici 3.b - Classes contenidor amb arrays està… · 2017 ›

Más ejercicios de Classes contenidor amb arrays estàtics i composició