Estratto del documento

Lezione 4 - 13/03/2026

compoE:\Laurea Magistrale\SDTRA - Bevilacqua\Laboratori\Lezione 4 - 13-03-2026\Lezione_4_13032026.ccwen1

//Lezione 4 - 13/03/202623 /*Trasformiamo un codice funzionante da C a C++: leggivet, stampavet e raddoppiavet.*/45 /*La funzione di output è cout, quella di input cin.*/67 # include <iostream>8 using namespace std;910

Classe Vettore

class Vettore {11 private:12 int dim;13 int V[10];14 public:15 // Costruttore (spiegato dopo)16 Vettore() {17 cout << "Costruttore chiamato! Oggetto Vettore creato." << endl;18 }19 // Distruttore (spiegato dopo)20 ~Vettore() {21 cout << "Distruttore chiamato! Oggetto Vettore distrutto." << endl;22 }23 void leggidim(int);24 void stampadim();25 void leggivet();26 void raddoppiavet();27 void stampavet();28 };2930

/*Nel main devo stanziare il mio oggetto di classe vettore: sto istanziando l'oggetto "A" ad essere un oggetto di classe vettore.31 "A" porta le proprietà dell'oggetto in cui istanza; portandosi la sua componente dim e V, componenti di tipo attributo.*/3233

Funzione main

int main() {34 Vettore A;35 //A.dim=7; errata, perché dim è un elemento privato della classe vettore, pertanto inaccessibile al main, che non è funzione di classe36 A.leggidim(7); //è una chiamata di una funzione come metodo dell'oggetto A, di classe vettore37 A.stampadim(); //è una chiamata della funzione stampa come metodo della funzione A, di classe vettore38 A.leggivet();39 cout << "Vettore inserito: " << endl;40 A.stampavet(); //è una chiamata della funzione stampa come metodo della funzione A, di classe vettore41 A.raddoppiavet(); //è una chiamata della funzione doppio come metodo della funzione A, di classe vettore42 cout << "Vettore raddoppiato: " << endl;43 A.stampavet(); //è una chiamata della funzione stampa come metodo della funzione A, di classe vettore44 }A454647

//"leggivet" è una funzione pubblica che ha accesso alle variabili private di A.48 //Se vado a chiamare leggivet(), posso passargli un numero, es.7, ed è come se lo scrivo su A. Io voglio dare un valore alla componente di A49 void Vettore::leggidim(int A) {50 dim = A; //dim è una variabile privata, ma leggivet è una funzione pubblica che ha accesso a dim, quindi posso scrivere dim=A, e così assegno ad A.dim il valore di A51 }5253

void Vettore::stampadim() {54 cout << "La dimensione del vettore è: " << dim << endl;55 }5657

void Vettore::leggivet() {58 int i;59 for (i=0; i<dim; i++) {60 cout << "Inserisci il valore dell'iesimo elemento" << endl;61 cin >> V[i];62 }63 }6465

void Vettore::stampavet() {66 int i;67 for (i=0; i<dim; i++) {68 cout << V[i] << endl;69 }70 }7172

void Vettore::raddoppiavet() {73 for(int i=0; i<dim; i++) {74 V[i] = 2*V[i];75 }76 }777879

Costruttore e distruttore

/*In C++ esistono due funzioni particolari: la funzione costruttore e quella distruttore.80 Esse hanno sempre lo stesso nome della classe: se ho fatto una classe vettore, la funzione costruttore si chiamerà 81 appunto "vettore", mentre quella distruttore "~vettore".82 La funzione costruttore non deve mai restituire alcun tipo di argomento (non si mette mai void, double, int... dalla parte del codomio).83 Voglio che la funzione costruttore abbia come effetto quello di scrivere un messaggio a video che avvisa che 84 l'oggetto è stato costruito. Questa funzione viene chiamata in maniera automatica quando l'oggetto viene creato.85 La linea di codice di istanziazione "vettore A" di prima, chiama in maniera automatica la funzione costruttore, 86 e lo farà per ogni oggetto costruito in quella classe.87 Ora creiamo la versione del distruttore. L'unica cosa che cambia è l'aggiunta della ~(tilde).*/888990

//----------------------------------------------------------------------------------------·--------------// d 盦}91 *9293

Allocazione dinamica della memoria

/*Allocazione dinamica della memoria 94 Per elaborare un file, esso va portato nella memoria di lavoro.95 Cosa significa gestire la memoria dinamica del nostro computer? Useremo "malloc" (allocare qualcosa alla memoria), 96 "delete" (cancellare), "new" (fare qualcosa di nuovo) e "free" (liberare qualcosa).97 La prima e l'ultima sono funzioni del linguaggio C; in C, alloco con malloc e cancello con free.98 In C++ non sono funzioni, invece, pertanto non saranno seguite da parentesi tonde; alloco con new, e cancello con delete.99100

La funzione "malloc" alloca la memoria quando ci serve.101 L'allocazione statica si chiama così perché una volta fatta, è staticamente bloccata; essa è la più facile da eseguire,102 ma c'è uno spreco di memoria. Per cambiare la logica, dobbiamo cambiare anche l'area di memoria: in un'area si fanno le -Sopra).103 cose staticamente, nell'altra dinamicamente (Vedi disegno su appunti su iPad).104 Per accedere all'area statica, non c'è necessità di usare i puntatori, contrariamente alla memoria dinamica, dove sono 105 fondamentali. Da questo momento in poi, in un qualsiasi main, se voglio accedere all'area dinamica, devo 106 dichiarare una variabile di tipo puntatore; di conseguenza, devo anche dichiarare una struttura dati, la cui più 107 semplice è la struttura dati, il vettore è quella più semplice.108 Vado a dichiarare una variabile p che conterrà l'indirizzo della variabile puntatore.109 Chiedo a runtime (fase di esecuzione) la dimensione del mio vettore: mentre lo sto eseguendo,110 chiedo all'utente di inserire un numero, e questo numero sarà la dimensione del mio vettore 111 ("Quanto deve essere lungo/grande dim?"").112 Quando viene assegnato un valore, dim in C diventa un'informazione che può essere usata da una funzione,113 la quale, avendo saputo quanto deve essere grande l'area di memoria, la riserva.114 "malloc" deve riservare la memoria tramite sizeof() byte, e di questi interi ne deve memorizzare dim.115 D'ora in poi, posso gestire una funzione vettoriale p[i] per puntare la i-esima componente.116 Se mi accorgo di aver bisogno di altri 100 elementi (quindi dim aumenta), faccio "malloc" e troverà altra area disponibile.117 "free()" deve scegliere il riferimento tra area di memoria statica e dinamica.118 - "free(p);" annulla il valore di p.119 - "delete p;" cancella tutto, ma non è una funzione, motivo per cui non mettiamo le parentesi 120 - "new" necessita di un'informazione che dice di quali variabili stiamo parlando, e quante ne voglio: p = new[int, dim].*/121122123

Esempio di codice

#include <iostream>124 #include <cstdlib> // Necessaria per malloc e free125126 using namespace std;127128

int main() {129 int dim;130 int *p;131132

cout << "Inserisci la dimensione: ";133 cin >> dim;134135

//Libera la memoria alla fine136 free(p);137138

return 0;139 }140141

/*Allocare memoria vuol dire trovare un punto in cui posso inserire le informazioni, significa quindi costruire.142

Anteprima
Vedrai una selezione di 4 pagine su 15
Lezione 4 Sistemi per la riabilitazione e la terapia assistita Pag. 1 Lezione 4 Sistemi per la riabilitazione e la terapia assistita Pag. 2
Anteprima di 4 pagg. su 15.
Scarica il documento per vederlo tutto.
Lezione 4 Sistemi per la riabilitazione e la terapia assistita Pag. 6
Anteprima di 4 pagg. su 15.
Scarica il documento per vederlo tutto.
Lezione 4 Sistemi per la riabilitazione e la terapia assistita Pag. 11
1 su 15
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze mediche MED/34 Medicina fisica e riabilitativa

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher rebeccasanteramo di informazioni apprese con la frequenza delle lezioni di Ssistemi diagnostici, terapeutici e riabilitativi avanzati e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Politecnico di Bari o del prof Amoruso Vitantonio.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community