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)

Enunciado: Exercici 1 · Metodologia de la Programació UAB 2018

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 ›

Más ejercicios de Apuntadors, arrays dinàmics i cost dels mètodes