Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 8 Oggetti statici e dinamici. Classi annidate. Costruttori/distruttori.

Slides:



Advertisements
Presentazioni simili
1 Automazione dellalgoritmo ricorsivo di permutazione eseguita da Mariano Melchiorri.
Advertisements

Esercitazioni If nidificati
Uso avanzato di C.
if (condizione.) { blocco_istruzioni } else
Calcolo del minimo comune multiplo (m.c.m.) Luigi Sante
Puntatori in C e C++.
Ricorsione Procedure e funzioni ricorsive. Definizioni Un oggetto si dice ricorsivo se è definito totalmente o parzialmente in termini di sé stesso La.
Costruttori e Distruttori
Linguaggio C++ Operatori – numeri pseudocasuali - costanti.
Numeri casuali.
Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Strutture dati dinamiche.
Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Strutture dati dinamiche.
Fondamenti di Informatica Prof. Cantone
Fondamenti di Informatica
UD 3: “Le Liste” UD 4: “Pile e Code” UD 5: “Alberi e grafi”
Dallalgoritmo minimax allalgoritmo alfa-beta. MINIMAX int minimax(stato, livello) { if((livello == max_livello) || condizione_uscita(stato)) { CAMMINO.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Liste.
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
Laboratorio di Linguaggi lezione VIII Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Laboratorio di Linguaggi lezione V Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione VII: puntatori 3/3 Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Introduzione al linguaggio C++ 5 lezioni
Corso di Laurea in Biotecnologie Informatica (Programmazione)
CORSO DI PROGRAMMAZIONE II
Algoritmi e Strutture Dati Alberi Binari di Ricerca.
Fondamenti di Informatica I a.a Il linguaggio C Il controllo di flusso La selezione condizionale Listruzione switch I cicli Le istruzioni break,
Approfondimento delle classi
Selezione (=scelta) con “if-else”
memoria gestita staticamente:
9) If e else. Lab.Calc.I AA2002/03 - cap.92 espressione.
Istruzioni di selezione (If/else/switch)
1 Strutture Dinamiche Corso di Informatica A Vito Perrone.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
1 ListaDiElem Cancella( ListaDiElem lista, TipoElemento elem ) { ListaDiElem puntTemp; if( ! ListaVuota(lista) ) if( lista–>info == elem ) { puntTemp =
Università degli Studi di BresciaA.A. 2012/2013 Fondamenti di Programmazione Docente: Alessandro SaettiA.A. 2012/2013 Università degli Studi di Brescia.
Laboratorio di Informatica INF3 INTDER01 Prodotto da Generali Matteo e da Zaniboni Filippo.
void binario(int n); …………………
Puntatori e gestione dinamica della memoria
Unità Didattica 3 Linguaggio C
Laboratorio di Linguaggi lezione VII: variabili Globali e Locali Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali.
1 Applet ed HTML Fondamenti di Informatica Corso D.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 9 Tipi parametrici Collezioni generiche. Strutture matematiche parametriche.
Matrici: un’implementazione parametrica in C++
Corso di Informatica 2 a.a. 2003/04 Lezione 6
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Approfondimenti sulle Classi.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Polimorfismo.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 2 La ricorsione Corso di Informatica 2 a.a. 2003/04 Lezione 2.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 5 Le strutture informative Corso di Informatica 2 a.a. 2003/04 Lezione 5.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Cicli ed asserzioni Corso di Informatica 2 a.a. 2003/04 Lezione 1.
Ripetizione La vera potenza dei programmi per computer risiede nella capacità di ripetere lo stesso calcolo o sequenza di istruzioni più volte, ogni volta.
Sintassi: Programma e classi Program::=prog {ClassDeclList {StatList}} ClassDeclList::=ClassDecl ClassDeclList |  ClassDecl::=class Ide c [StaticMetDefList]
Ugo de'Liguoro - Informatica 2 - Introduzione Informatica 2 Introduzione al corso a.a. 2003/04.
#include void main() { int a,b,c,; float s, x,x1,x2,delta,alfa,beta; int num[3]; int i; printf("La forma classica dell'equazione di 2° grado è: a*x^2+b*x+c=0\n.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Informatica A.A. 2009/2010 Parte 4 Dai diagrammi di flusso alla programmazione strutturata: le istruzioni if, for, while, … Corso A: Prof. Stefano Berardi.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 11 Ereditarietà in C++
Flusso Statico e Dinamico 20/03/2006. Codice da Interpretare int valore; valore = funz(); if( valore > 0 ) { [codice1] } else { [codice2] } return valore;
Fondamenti di Informatica II Ingegneria Informatica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Informatica 4 Funzioni. FUNZIONE: definizione MATEMATICA Relazione (o applicazione) binaria tra due insiemi A e B che associa a ogni elemento di A un.
Sottoprogrammi e funzioni
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi.
CORSO DI PROGRAMMAZIONE II
Array (visita e ricerca) CORDA – Informatica A. Ferrari.
Case Study - Un (linguaggio) costrutto tipato: Accedere indirizzi fuori dai bounds di un array Char A[n1..n2]; Int i; … i = e … … A[i] … Sono due interi.
Lezione sulle allocazioni dinamiche
13. Strutture dati dinamiche Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
Transcript della presentazione:

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 8 Oggetti statici e dinamici. Classi annidate. Costruttori/distruttori.

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 8 Costruttori/distruttori Quando un oggetto viene allocato viene eseguita una routine di inizializzazione: il costruttore. Quando viene deallocato si esegue un distruttore

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 8 Necessità di un cotruttore Ratio::Ratio(int n, int d) { Assign(n, d); } void Ratio::Assign (int n, int d) { if (d != 0) {num = n, den = d;} else cout << "divisione per 0" << endl; } Il costruttore mantiene l’invariante “il denominatore è sempre  0”

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 8 Costruttori e oggetti statici class Ratio { public: Ratio (int n=0, int d=1) { num = n; den = d;} private:... }; default Ratio a (7, 4); // a vale 7/4 Ratio b (7); // b vale 7/1 Ratio c; // c vale 0/1 costruttore

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 8 Oggetti e valori Un oggetto può essere il valore di una funzione o di un metodo Ratio Ratio::Sum (Ratio r) { Ratio q (num*r.den+den*r.num,den*r.den); return q; } Già l’ANSI-C consente di ritornare strutture

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 8 Costruttore di copia class Ratio { public: Ratio (int n=0, int d=1) { num = n; den = d;} Ratio (const Ratio& r) { num = r.num; den = r.den;} private:... }; Ratio a (2,3); Ratio b(a); // b è un clone di a Per ritornare un oggetto una funzione usa il costruttore di copia Costruttore di copia

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 8 Polinomi class Polinomio { public: Polinomio (int degree, double c[]); // Pre: c[] ha dimensione >= degree + 1 // Post: genera il polinomio di grado degree e // coefficienti c[0..degree] (in ordine decr. di grado) Polinomio (const Polinomio& p); // costr. di copia ~Polinomio (); // distruttore...

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 8 Polinomi Questo si otterrebbe usando il costruttore di copia di default Polinomio q (p);

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 8 Polinomi Polinomio::Polinomio (const Polinomio& p) { degree = p.degree; coeff = new double[degree + 1]; for (int i = 0; i < degree + 1; i++) coeff[i] = p.coeff[i]; } Polinomio q (p); p q

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 8 Puntatori ad oggetti Gli oggetti sono valori, e possono essere il riferimento di puntatori Ratio a (2, 3); Ratio* p = &a; p->print() // attiva il metodo // print() di a

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 8 Istanziazione dinamica di classi Quanti razionali mi servono? Ratio* p = new Ratio(2, 3); // p punta ad un nuovo oggetto // che vale 2/3 allocazione

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 8 Puntatori per risparmiare Polinomio Polinomio::Sum (Polinomio p) {…} Polinomio Polinomio::Sum (Polinomio* p) {…} La prima scrittura causa la produzione di una copia di p; ma la seconda può causare side effects su p

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 8 Classi annidate Una classe può essere usata come campo di un’altra: si dice annidata e il processo di annidamento si dice composizione class Polinomio { public:... private: int degree; // grado del polinomio Ratio* coeff; // vettore di coefficienti razionali }

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 8 Funzioni e classi friend

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 8 Le liste con le classi List ListEl

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 8 Le liste con le classi class ListEl; typedef ListEl *PListEl; class ListEl { friend class List; private: T info; PListEl next; ListEl (T x, PListEl nxt) { info = x; next = nxt;} }; La classe List è friend di ListEl : i suoi metodi avranno accesso ai campi privati di ListEl Il costruttore privato consente l’uso della classe solo alla classe friend

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 8 Le liste con le classi class List { public: void insert (T x); // inserimento in testa void insert (int index, T x); // overloading: inserimento con indice bool empty (void) { return first == NULL;} //... private: PListEl first; // puntatore al primo el. }; void List::insert (T x) { first = new ListEl(x, first); }