Exercici 1 · Metodologia de la Programació UAB 2018
Tema: Apuntadors, arrays dinàmics i cost dels mètodes · Del examen Examen Segon Parcial Curs 2018-2019 (2018)
Enunciado
Exercici 1 (2,5 punts). Operador d'assignació de la classe Vector
Considerem la classe Vector utilitzada per a la gestió d'un array dinàmic d'elements de tipus Punt. La declaració de la classe és la següent:
class Vector
{
public:
Vector(): m_array(nullptr), m_maxElements(0), m_nElements(0) {}
Vector(const Vector& v);
~Vector();
Vector& operator=(Vector& v);
bool insereix(const Punt& pt, int posicio);
bool elimina(int posicio);
int getNElements() const;
int getMaxElements() const;
Punt& operator[](int posicio);
private:
Punt* m_array;
int m_nElements;
int m_maxElements;
Punt m_valorDefecte;
};
Es demana redefinir el comportament de l'operador d'assignació quan s'executa una sentència del tipus v1 = v2, considerant les següents especificacions particulars:
L'operador ha de traspassar (moure) tots els elements de v2 cap a v1, buidant completament v2. En finalitzar l'operació, v2 ha de quedar en el mateix estat que tindria en ser inicialitzat pel constructor per defecte (sense memòria assignada i amb els comptadors a zero).
La capacitat màxima ( m_maxElements) de v1 ha de fixar-se exactament en el doble del nombre d'elements reals transferits des de v2 (tant si aquest valor és superior com inferior a la capacitat que tenia v2 prèviament). D'aquesta manera es permeten posteriors insercions o eliminacions sense necessitat d'un redimensionament immediat.
La resta del funcionament ha de seguir el patró estàndard d'un operador d'assignació: gestió correcta de l'autoassignació ( v1 = v1), alliberament de la memòria prèvia que contingui v1, gestió de vectors buits i retorn de la referència a l'objecte actual per permetre assignacions encadenades.
Vector& Vector::operator=(Vector& v)

Solución
Según los criterios oficiales de corrección
Implementeu l'operador d'assignació: Vector& Vector::operator=(Vector& v)
Solución: ```cpp Vector& Vector::operator=(Vector& v) { // 1. Control de l'autoassignació if (this != &v) { // 2. Alliberament de la memòria dinàmica existent a v1 if (m_array != nullptr) { delete[] m_array; m_array = nullptr; } // 3. Assignació del nombre d'elements i càlcul de la nova capacitat m_nElements = v.m_nElements; m_maxElements = m_nElements * 2; // 4. Reserva i còpia dels elements si v2 contenia dades if (m_maxElements > 0) { m_array = new Punt[m_maxElements]; for (int i = 0; i < m_nElements; i++) { m_array[i] = v.m_array[i]; } } else { m_array = nullptr; } // 5. Buidar v2 deixant-lo com si s'hagués cridat el constructor per defecte if (v.m_array != nullptr) { delete[] v.m_array; v.m_array = nullptr; } v.m_nElements = 0; v.m_maxElements = 0; } // 6. Retorn de la referència a l'objecte destí return *this; } ```
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 2 · 2024 · Exercici 4 · 2018 ›