Blog del corso di Programmazione (9 CFU) tenuto da Marco La Cascia presso l'Universita' di Palermo per il corso di laurea in Ingegneria Informatica e delle Telecomunicazioni. Tratta la programmazione a oggetti in Java.
lunedì 9 dicembre 2013
Note sulla memoria dinamica e nuova esercitazione
Disponibili le note sulla gestione dinamica della memoria e una nuova esercitazione.
Per lo svolgimento dell'esercitazione potete scaricare queste implementazioni delle classi Razionale e Complex.
Salve professore, ho notato che ristrutturando il programma dell'esercizio 1 su più file, facendo nel main una chiamata ad una funzione friend che nel mio caso si aspettava due dati di tipo Razionale, e passando invece due interi come richiesto dall'esercizio 1 (dopo avere inserito un costruttore a cui passavo un intero (per la classe Razionale)), la conversione implicita non va a buon fine. Eppure il programma funziona finché lavoro su un solo file. A cosa è dovuto questo problema?
Questo commento è stato eliminato dall'autore.
RispondiEliminaSalve professore,
RispondiEliminaho notato che ristrutturando il programma dell'esercizio 1 su più file, facendo nel main una chiamata ad una funzione friend che nel mio caso si aspettava due dati di tipo Razionale, e passando invece due interi come richiesto dall'esercizio 1 (dopo avere inserito un costruttore a cui passavo un intero (per la classe Razionale)), la conversione implicita non va a buon fine. Eppure il programma funziona finché lavoro su un solo file. A cosa è dovuto questo problema?
Da come descrivi il problema non so darti una risposta. Eventualmente inviami il codice per email che ci do un'occhiata.
RispondiEliminabuona sera professore, avrei un dubbio sulla classe numero 5 (quella implementata insieme in aula), in particolare nella funzione resize.
RispondiEliminamolto sommariamente la classe era cosi:
class Vec {
public:
int Size() { return size; }
-
-
-
private:
int *data;
int size;
};
void Vec::Resize(int dim) {
int *temp = new int[dim];
for(int i = 0; i != dim; ++i)
temp[i] = 0;
for(int i = 0; i < dim && i < size; ++i)
temp[i] = data[i];
delete [] data;
data = temp;
// ------> size = dim;
}
int main() {
Vec v;
cout << v.Size() << endl; //stampa 10
v.Resize(8);
cout << v.Size() << endl; //stamperà sempre 10 se nella funzione non facciamo size = dim;
return 0;
}
sempre nella funzione resize, volevo sapere se la riga segnata non l'abbiamo messa per una dimenticanza, oppure perchè non è una cosa che ci interessa
come non detto, è stata una dimenticanza mia, un collega mi ha fatto notare che in aula lo aveva scritto.
Eliminacordiali saluti