Lezione 2
Lezione 2
La classe Vettore

In questa seconda lezione affronteremo gli stessi problemi della prima lezione (lettura di dati da un file, calcolo di media, varianza e mediana) utilizzando un contenitore di dati più evoluto del semplice array del C. A questo proposito nella prima parte della lezione costruiremo la nostra prima classe, la classe Vettore. Nella seconda parte adatteremo le funzioni già scritte nella lezione scorsa in modo che possano funzionare con oggetti di tipo Vettore. Quindi in sintesi :

ESERCIZIO 2.0 - Creazione della classe Vettore :
Implementare una classe che abbia come data membri (privati) un intero (dimensione del vettore) ed un puntatore a double (puntatore alla zona di memoria dove sono immagazzinati i dati).
Implementare:
  1. Un costruttore di default, che assegni valori nulli alla lunghezza del vettore ed al puntatore.
  2. Un costruttore che abbia come argomento un intero: questo deve creare un vettore di lunghezza uguale all'intero e tutte le componenti nulle (usando un new per allocare la memoria necessaria).
  3. Un distruttore: deve chiaramente deallocare con delete[] la zona di memoria allocata con new.
  4. Dei metodi per inserire e leggere i valori della componenti: questi metodi devono controllare che l'indice delle componenti richieste sia compatibile con la lunghezza del vettore.
Header file della classe:

Esempio di implementazione della classe:

Programma di test

Si verifichi che una classe realizzata in questo modo si comporta in modo strano se usiamo l'operatore di assegnazione. Questo è un problema generico quando abbiamo classi con puntatori come data membri: bisogna assicurarsi che ciascuna istanza della classe abbia la propria zona di memoria.
Affinché la classe si comporti in maniera consistente, è necessario implementare anche:
  1. un costruttore che abbia come argomento un altro vettore (copy constructor): deve creare una copia del vettore argomento.
  2. l'overloading dell'operatore di assegnazione, assicurandosi che i dati vengano copiati dal vettore di partenza a quello di arrivo.

Modifiche all'header file

Copy constructor

Operatore di assegnazione

Il puntatore this

ESERCIZIO 2.1 - Codice di analisi dati utilizzando la classe Vettore (da consegnare) :
Proviamo ora a riscrivere il codice della prima lezione utilizzando un contenitore di dati più raffinato: la classe Vettore ci permetterà di riempire il contenitore dati controllando per esempio che non stiamo sforando la dimensione allocata. Il Vettore inoltre si porta dietro anche la sua dimensione: se dobbiamo calcolare la media degli elementi di un Vettore non dobbiamo più passare la dimensione come argomento esterno.
Per svolgere questo esercizio dobbiamo :
  1. modificare tutte le funzioni in funzioni.h e funzioni.cpp in modo che lavorino con oggetti di tipo Vettore invece che con semplici array del C.
  2. modificare il main in modo che utilizzi la nuova classe Vettore e le nuove funzioni.
  3. modificare il Makefile
Se non ci riuscite da soli potete dare un'occhiata ai suggerimenti qui sotto.

Struttura del programma:

Le funzioni:

Makefile:

Perchè CalcolaMedia vuole in input un (const Vettore &) mentre CalcolaMediana semplicemente un (Vettore) ? :


Only for curious kids : the move semantic :




Back to Home Page