Ingegneria Elettronica Ingegneria delle Telecomunicazioni (J-Z) Ing. Antonio Monteleone A.A. 2001/02 3 ciclo
|
|
- Emilio Franceschini
- 6 anni fa
- Visualizzazioni
Transcript
1 Ingegneria Elettronica Ingegneria delle Telecomunicazioni (J-Z) Ing. Antonio Monteleone A.A. 2001/02 3 ciclo
2 Il C++ permette la definizione di nuovi tipi (oltre a int, float, double ), detti tipi definiti dall utente (UDT) L Object Orientation è implementata in C++ attraverso il concetto di classe: Idati membro (o attributi) di una classe definiscono lo stato dell oggetto Lefunzioni membro (o metodi) di una classe implementano la risposta ai messaggi Corso di Fondamenti di Informatica II 41
3 Point2D.h class Point2D { public: Point2D(double x, double y); double x(); double y(); double norm(); double phi(); private: double m_x; double m_y; ; dati membro Punto e virgola! Point2D.cpp costruttore funzioni membro #include Point2D.h Point2D::Point2D(double x, double y) : m_x(x), m_y(y){ double Point2D::x() { return m_x; double Point2D::norm() { return sqrt( m_x*m_x + m_y*m_y);... Corso di Fondamenti di Informatica II 42
4 L operatore :: di risoluzione dello scope L operatore binario :: di risoluzione dello scope serve ad indicare al compilatore a quale classe appartiene una data funzione membro // altro codice double Point2D::x() {return m_x; double Point2D::norm() { return sqrt( x()*x() + y()*y()); double Point3D::x() {return m_x; // altro codice Tramite l operatore :: il compilatore è in grado di distinguere tra funzioni membro aventi lo stesso nome ma appartenenti a classi diverse Quando una funzione membro chiama un altra funzione membro appartenente alla stessa classe lo può fare senza utilizzare l operatore :: Corso di Fondamenti di Informatica II 43
5 In C++ è possibile controllare l accesso ai membri di una classe mediante l uso delle seguenti parole chiave public le variabili e le funzioni membro elencate dopo lo specificatore public, e prima dello specificatore successivo, sono accessibili in tutti i punti del programma in cui si può accedere a un oggetto della classe private le variabili e le funzioni membro elencate dopo lo specificatore private, e prima dello specificatore successivo, sono accessibili soltanto all interno delle funzioni membro della classe protected le variabili e le funzioni membro elencate dopo lo specificatore protected, e prima dello specificatore successivo, sono accessibili soltanto all interno delle funzioni membro della classe e delle classi da questa derivate Corso di Fondamenti di Informatica II 44
6 Gli specificatori di accesso ai membri (2) Gli specificatori d accesso sono sempre seguiti dai due punti e possono comparire più volte e in qualunque ordine nella definizione di una classe E comunque preferibile far comparire ciascuno specificatore d accesso una sola volta e per primo lo specificatore public class A { public: int i; void func(); private: char j; float f; ; void main() { A a1; A *a2 = new A; a1.j = 10; // non compila a1.i = 12; // OK a2->j = 10; // non compila a2->func(); // OK ; Corso di Fondamenti di Informatica II 45
7 Per accedere ai membri di una classe si utilizzano gli operatori di accesso ai membri L operatore punto. si usa col nome di un oggetto o con un riferimento a un oggetto L operatore freccia -> si usa con un puntatore a un oggetto counter.h class Counter { int val; public: Counter(int v=0): val(v) { void reset(){val = 0; void incr() {++val; void decr() {--val; int value() {return val; ; #include <iostream> #include counter.h void main() { Counter cntr; cntr.val = 1; // non compila! cntr.incr(); Counter pcntr = new Counter; pcntr->incr(); cout << pcntr->value() << endl; cout << cntr.value() << endl; delete pcntr; Corso di Fondamenti di Informatica II 46
8 I dati membro privati non sono accessibili al di fuori della classe I dati e le funzioni membro pubbliche sono gli unici elementi accessibili dall esterno: essi costituiscono l interfaccia di una classe Point2D.h class Point2D { public: Point2D(double x, double y); double x(); double y(); double norm(); double phi(); private: double m_x; double m_y; ; Point2D.cpp #include Point2D.h Point2D :: Point2D(double x, double y) : m_x(x), m_y(y) { double Point2D::x() { return m_x; double Point2D::norm() { return sqrt(m_x* m_x + m_y* m_y); Corso di Fondamenti di Informatica II 47
9 La struttura interna dei dati (m_x, m_y) di un oggetto della classe Point2D sono nascosti (private) agli utilizzatori della classe. Gli utilizzatori non dipendono dalla struttura interna dei dati: se la struttura interna cambia, ad esempio si decide di rappresentare un punto mediante coordinate polari (m_r, m_phi), il codice che usa Point2D non deve essere modificato. Corso di Fondamenti di Informatica II 48
10 In C++ una struct è semplicemente una classe i cui membri sono pubblicamente accessibili struct MyStruct { int val; void f(); ; class MyStruct { public: int val; void f(); ; In una struct i membri senza specificatore di accesso sono pubblici In una classe i membri senza specificatore d accesso sono privati Corso di Fondamenti di Informatica II 49
11 Un costruttore è un metodo il cui nome è quello della classe a cui appartiene Lo scopo di un costruttore è quello di costruire oggetti del tipo della classe. Questo implica l inizializzazione degli attributi e, frequentemente, allocazione di memoria dallo heap Un costruttore la cui lista di argomenti è vuota o composta di argomenti di default viene normalmente chiamato costruttore di default Point2D::Point2D() {.... // costruttore di default #include Point2D.h... Point2D pt; // oggetto costruito con il // costruttore di default Corso di Fondamenti di Informatica II 50
12 (2) Un costruttore che ha come argomento un riferimento ad un oggetto della stessa classe viene chiamato costruttore di copia Point2D :: Point2D(const Point2D & pt) : m_x(pt.m_x), m_y(pt.m_y) { Il costruttore di copia viene normalmente utilizzato: quando un oggetto è inizializzato per assegnazione Point2D pt1(1,3), pt2(pt1); Point2D pt3 = pt1; // pt3 e pt2 vengono inizializzati con il costruttore di copia quando un oggetto è passato come argomento ad una funzione quando un oggetto è ritornato da una funzione Se il costruttore di copia non viene fornito esplicitamente, il compilatore ne genererà uno automaticamente Corso di Fondamenti di Informatica II 51
13 (3) I dati membro di una classe possono essere inizializzati nel costruttore per mezzo di una lista di inizializzatori, che precede il corpo della funzione Point2D::Point2D(double x, double y) : m_x(x), m_y(y) Lista di inizializzatori { I dati membro (non statici) che siano o riferimenti o const devono essere inizializzati nella lista di inizializzatori I dati membro sono inizializzati nell ordine della loro dichiarazione nella classe, non nell ordine in cui compaiono nella lista di inizializzatori Corso di Fondamenti di Informatica II 52
14 (4) Quando uno dei dati membro è esso stesso un oggetto, il costruttore appropriato viene scelto sulla base dei parametri forniti nell inizializzazione. class A { public: A(int x = 0) : m_x(x) { // altri metodi private: int m_x; class B { public: B(const A &a1, int z); // altri metodi private: A m_a1, m_a2, m_a3; B::B(const A &a1, int z) : m_a1(a1), m_a3(z) { // m_a1 : costruttore di copia // m_a2, m_a3 : costruttore di default Ogni dato membro che non compare nella lista di inizializzatori viene inizializzato chiamando il costruttore di default della classe a cui il dato membro appartiene Corso di Fondamenti di Informatica II 53
15 (5) Il distruttore è un metodo il cui nome è quello della classe a cui appartiene preceduto da una tilde (~) Il distruttore viene chiamato automaticamente quando un oggetto sta per essere distrutto (sia perchè delete è stato invocato sia perchè l oggetto è finito fuori scope Il compito del distruttore è di assicurarsi che l oggetto per cui è invocato verrà distrutto senza conseguenze. In particolare, se memoria è stata allocata nel costruttore, il distruttore dovrà assicurarsi di restituirla allo heap Point2D::~Point2D() { // vuoto, in questo caso Corso di Fondamenti di Informatica II 54
16 (6) Icostruttori con un solo parametro sono automaticamente trattati come operatori di conversione Point2D:: Point2D(int i) {... // costruisce un punto a partire da un intero, ma puo // essere usato per convertire un intero in un punto p = Point2D(i); Per evitare la conversione si può usare explicit explicit Point2D(int); // solo costruttore Corso di Fondamenti di Informatica II 55
17 Una classe che ha dei membri di tipo puntatore deve sempre definire un costruttore di copia class IVector { public: IVector(int len=100):m_len(len){ m_data = new int[m_len]; for (int i=0; i<m_len; ++i) m_data[i] = 0; ~IVector() { delete [] m_data; int size() { return m_len; int & item(int index) { return m_data[index]; private: int m_len; int *m_data; ; int main() { IVector v1(10), v2 = v1; v1.item(0) = 10; // v2[0]==10! return 0; // crash! Soluzione: costruttore di copia IVector::IVector(const IVector &src) : m_len(src.m_len) { m_data = new int[m_len]; for (int i=0; i<m_len; ++i) m_data[i] = src.m_data[i]; Corso di Fondamenti di Informatica II 56
18 La parola chiave friend può essere usata per permettere che una certa funzione o classe abbia libero accesso ai dati privati della classe class A { private: int m_x; friend int fun(const A &); friend void C::f(int); ; class B { private: int m_y; friend class C; ; class C { void f(int i); void g(); ; int fun(const A & a) { return a.m_x; // OK perché friend void C::f(int i) { A a; a.m_x = i*10; // OK perché friend void C::g() { A a; a.m_x = 12; //errore: g non è friend Corso di Fondamenti di Informatica II 57
19 (2) friend e nemico dell incapsulamento e quindi dell OOP Un uso eccessivo di friend è quasi sempre sintomo di un cattivo disegno Esistono anche situazioni in cui l uso di friend può essere accettabile Overloading di operatori binari Considerazioni di efficienza Relazione speciale fra due classi Corso di Fondamenti di Informatica II 58
20 Variabili membro dichiarate static in una classe sono condivise da tutti gli oggetti di quella classe Funzioni membro dichiarate static non possono accedere a membri non statici della classe Variabili membro statiche possono essere usate e modificate soltanto da funzioni membro statiche I membri static possono essere public, private, o protected Corso di Fondamenti di Informatica II 59
21 Un esempio: un contatore di istanze Class MyClass { private: static int instancecount; static void incrementcount() {instancecount++; static void decrementcount() {instancecount--; public: MyClass() {incrementcount(); ~MyClass() {decrementcount(); static int getinstancecount() { return instancecount; ; #include <iostream.h> #include MyClass.h int MyClass:: instancecount=0; int main() { MyClass a,b,c; MyClass *p=new MyClass; Un membro statico deve essere inizializzato una e una sola volta nel codice eseguibile Un metodo statico puo essere invocato cosi... cout<< How many? << MyClass::getInstanceCount() <<endl; delete p; cout<< and now? << a.getinstancecount() <<endl; return 0; o cosi`... Corso di Fondamenti di Informatica II 60
22 In un progetto C++ il codice è organizzato in Header files (.h o.hh) contengono dichiarazioni di classe e prototipi di funzioni un dato header file non deve essere incluso più volte nello stesso file sorgente File sorgente (.C,.cxx,.cpp,.cc) #ifndef MyClass_H #define MyClass_H // dichiarazioni.. #endif contengono l implementazione di funzioni e metodi includono gli header files mediante la direttiva #include del precompilatore Gli utilizzatori di una classe devono solo includere l header file contenente la dichiarazione della classe (chi utilizza una classe non ha bisogno di sapere come questa è implementata ma solo di conoscere la sua interfaccia) Corso di Fondamenti di Informatica II 61
23 In C++ è possibile effettuare l overloading degli operatori per utilizzarli sugli oggetti delle classi definite dagli utenti complex.h class Complex { double m_re, m_im; public : Complex(double re, double im) : m_re(re), m_im(im) { // ; #include complex.h void main { Complex c1(1, 2), c2(3,4); Complex c3 = c1 + c2; ridefinizione di + Obiettivo: scrivere le espressioni in cui compaiono gli oggetti con la stessa concisione delle espressioni in cui compaiono i tipi predefiniti Corso di Fondamenti di Informatica II 62
24 (2) Permette di utilizzare tipi definiti dall utente come se fossero tipi fondamentali E possibile effettuare l overloading di qualunque operatore ad eccezione di..* ::? sizeof La cardinalità, l associatività e la precedenza di un operatore non possono essere modificati Non è possibile creare nuovi operatori ma solo ridefinire quelli esistenti L overloading di un operatore è effettuato mediante la definizione di una funzione operatore Corso di Fondamenti di Informatica II 63
25 (3) Le funzioni operatore possono essere implementate come Funzioni membro tipo_di_ritorno nome_classe::operator op(argomenti) op è l operatore da ridefinire Funzioni non membro tipo_di_ritorno operator op(argomenti) Non sempre è possibile ridefinire un operatore come funzione membro #include <iostream> #include complex.h void main { Complex c1(1, 2); cout << c1; // operando sx non di tipo Complex ostream & operator << (ostream & os, const Complex & c); Corso di Fondamenti di Informatica II 64
26 Operatori unari sono implementati come (4) metodi senza argomenti (l oggetto è l argomento implicito) class Date { public: Date(int d, int m, int y); Date & operator++(); //preincr. ; void main() { Date d(12,03,2002); ++d; // d.operator++(); funzioni friend a un solo argomento class Date { public: Date(int d, int m, int y); friend Date & operator++(date &); ; void main() { Date d(12,03,2002); ++d; // operator++(d); Date & operator++(date &); Corso di Fondamenti di Informatica II 65
27 Overloading di operatori (5) Operatori binari possono essere implementati come metodi con un argomento (il primo argomento, implicito, è l oggetto il cui operatore agisce) class Complex { double m_re, m_im; public: Complex(double re, double im); const Complex operator+(const Complex & c) { return Complex(m_re + c.m_re, m_im + c.m_im); ; funzioni friend a due argomenti. class Complex { public: Complex(double re, double im); friend const Complex operator+(const Complex &c1, const Complex &c2); ; const Complex operator+(const Complex & c1, const Complex & c2); Corso di Fondamenti di Informatica II 66
28 Ogni oggetto puo accedere al proprio indirizzo tramite un puntatore di nome this Il valore di this non puo essere cambiato per una classe A il tipo di this e A* const o const A* const E particolarmente utile quando si definisce un operatore di assegnazione (=) o, in generale, quando si vuole restituire una copia o un riferimento all oggetto stesso class Time { public: Time(int h, int m, int s); Time & sethour(int h); Time & setmin(int m); private: int hh, mm, ss; ; Time & Time::setHour(int h) { hh = (h>0 && h <24)? h : 0; return *this; void main() { Time t(12,03,58); t.sethour(11).setmin(8); Corso di Fondamenti di Informatica II 67
29 L overload dell operatore di assegnazione L operatore di assegnazione e un operatore binario invocato dal compilatore quando compare un istruzione di assegnazione fra variabili non utilizzata per inizializzare un oggetto class MyClass {/*..*/; void main() { MyClass b; MyClass a = b; // costruttore di copia a = b; // a.operator=(b); In assenza di overload, il compilatore crea una veersione di default di tale operatore che effettua una copia degli oggetti membro a membro Corso di Fondamenti di Informatica II 68
30 L overload dell operatore di assegnazione (2) Una classe che ha dei membri di tipo puntatore deve sempre ridefinire l operatore = In assenza di overload, dopo l assegnazione la memoria puntata prima dell assegnazione dalla variabile puntatore dell operando sinistro non e piu accessibile i due oggetti hanno un puntatore alla stessa area di memoria L overload dell operatore = permette di eseguire la copia dell area puntata e non del puntatore. La memoria precedentemente puntata dall operando sinistro deve comunque essere deallocata e nuova memoria deve essere allocata Corso di Fondamenti di Informatica II 69
31 L overload dell operatore di assegnazione (3) Senza overload di = class IVector { public: IVector(int len=100):m_len(len) void main() { { /* */ IVector v1(10), v2(20); ~IVector() {/* */ v2 = v1; /* */ for (int i=0; i<v1.size(); ++i) int & operator [] (int i) { v1[i] = i; // v2[i]==i! assert(i>0 && i<m_len); // crash! return m_data[i] IVector & operator(const IVector &); Soluzione: overload di = private: int m_len; int *m_data; ; IVector & IVector::operator=(const IVector &src) { if (this == &src) return *this; if (m_data) delete [] m_data; m_len = src.m_len m_data = new int[m_len]; for (int i=0; i<m_len; ++i) m_data[i] = src.m_data[i]; return *this; Corso di Fondamenti di Informatica II 70
32 Overload degli operatori di I/O su stream Gli operatori << e >> possono essere ridefiniti per consentire operazioni del tipo: IVector v(10); for (int i=0; i<v.size(); ++i) v[i] = i; cout << Il vettore v vale << v << endl; Si utilizza una funzione friend: class IVector { friend ostream& operator<<(ostream& os, const IVector & v); /* */ ; ostream& operator <<(ostream& os, const IVector & v){ for (int i=0; i<v.size(); ++i) os << v[i] <<, ; return os ; // consente di scrivere cout << v1 << v2 Corso di Fondamenti di Informatica II 71
33 Un esempio, la classe Complex // complex.h #ifndef COMPLEX_H_INCLUDED #define COMPLEX_H_INCLUDED // definizione della classe Complex class Complex { public: Complex(double re=0, double im=0) : m_re(re), m_im(im) { Complex(const Complex & c) : m_re(c.m_re), m_im(c.m_im) { ~Complex() { double real() { return m_re; double imag() { return m_im; Complex & operator= (const Complex & c); Complex & operator+=(const Complex & c); Complex & operator-=(const Complex & c); Complex & operator*=(const Complex & c); Complex operator+ (); Complex operator- (); Complex operator+ (double x); Complex operator- (double x); Complex operator* (double x); bool operator==(double x); bool operator!=(double x); friend Complex operator+(double x, const Complex & c); friend Complex operator-(double x, const Complex & c); friend Complex operator*(double x, const Complex & c); friend bool operator==(double x, const Complex& c); friend bool operator==(const Complex & c1, const Complex & c2); friend bool operator!=(const Complex & c1, const Complex & c2); friend bool operator!=(double x, const Complex& c); friend const Complex operator+(const Complex& c1, const Complex& c2); friend const Complex operator-(const Complex & c1, const Complex & c2); friend const Complex operator*(const Complex & c1, const Complex & c2); private: double m_re, m_im; ; 72
34 // continua complex.h // dichiarazione delle funzioni operatore non membro Complex operator+(double x, const Complex & c); Complex operator-(double x, const Complex & c); Complex operator*(double x, const Complex & c); bool operator==(double x, const Complex& c); bool operator==(const Complex & c1, const Complex & c2); bool operator!=(const Complex & c1, const Complex & c2); bool operator!=(double x, const Complex& c); const Complex operator+(const Complex& c1, const Complex& c2); const Complex operator-(const Complex & c1, const Complex & c2); const Complex operator*(const Complex & c1, const Complex & c2); #endif // fine di complex.h 73
35 // complex.cpp #include complex.h // implementazione delle funzioni membro della classe Complex Complex & Complex::operator=(const Complex & c) { m_re = c.m_re; m_im = c.m_im; Complex & Complex::operator+=(const Complex & c) { m_re += c.m_re; m_im += c.m_im; return *this; Complex & Complex::operator-= (const Complex & c){ m_re -= c.m_re; m_im -= c.m_im; return *this; Complex & Complex::operator*= (const Complex & c){ m_re *= c.m_re; m_im *= c.m_im; return *this; Complex Complex::operator+() { return *this; Complex Complex::operator-() { return Complex(-m_re, -m_im); Complex Complex::operator+(double x) { return Complex(m_re + x, m_im); Complex Complex::operator-(double x) { return Complex(m_re - x, m_im); Complex Complex::operator*(double x) { return Complex(m_re * x, m_im * x); bool Complex::operator==(double x) { return m_re == x && m_im == 0; bool Complex::operator!=(double x) { return!operator==(x); 74
36 // continua complex.cpp // implementazione delle funzioni operatore non membro Complex operator+(double x, const Complex & c) { return Complex(x + c.m_re, c.m_im); Complex operator-(double x, const Complex & c) { return Complex(x - c.m_re, -c.m_im); Complex operator*(double x, const Complex & c) { return Complex(x * c.m_re, x * c.m_im); const Complex operator+(const Complex & c1, const Complex & c2) { return Complex(c1.m_re + c2.m_re, c1.m_im + c2.m_im); const Complex operator-(const Complex & c1, const Complex& c2) { return Complex(c1.m_re - c2.m_re, c1.m_im - c2.m_im); const Complex operator*(const Complex& c1, const Complex& c2) { return Complex(c1.m_re * c2.m_re - c1.m_im * c2.m_im, c1.m_re * c2.m_im + c1.m_im * c2.m_re); bool operator==(const Complex& c1, const Complex& c2) { return c1.m_re == c2.m_re && c1.m_im == c2.m_im; bool operator==(double x, const Complex& c) { return x == c.m_re && 0 == c.m_im; bool operator!=(const Complex& c1, const Complex& c2) { return c1.m_re!= c2.m_re c1.m_im!= c2.m_im; bool operator!=(double x, const Complex& c) { return x!= c.m_re 0!= c.m_im; 75
Overloading di operatori
Overloading di operatori In C++ è possibile effettuare l overloading degli operatori per utilizzarli sugli oggetti delle classi definite dagli utenti complex.h class Complex { double m_re, m_im; public
DettagliCorso di Laboratorio 2 Programmazione C++ Silvia Arcelli. 27 Ottobre 2014
Corso di Laboratorio 2 Programmazione C++ Silvia Arcelli 27 Ottobre 2014 1 AVVISO Nuovo calendario turni di laboratorio : I prova: 11, 12, 13 Novembre 2014 ore 9-12 II prova: 18, 19, 20 Novembre 2014 ore
DettagliLa programmazione ad oggetti (OOP)
Oggetti e Classi (CAP 10) Alberto Garfagnini, Marco Mazzocco Università degli studi di Padova 30 Novembre 2011 La programmazione ad oggetti (OOP) È un approccio concettuale alla programmazione (indipendente
DettagliIngegneria Elettronica Ingegneria delle Telecomunicazioni (J-Z) Ing. Antonio Monteleone A.A. 2001/02 3 ciclo
Ingegneria Elettronica Ingegneria delle Telecomunicazioni (J-Z) Ing. Antonio Monteleone A.A. 2001/02 3 ciclo In C++ è possibile distinguere due aree distinte di memoria: memoria stack e memoria heap E
DettagliOOP in C++ ha membro (dati membro) e funzioni membro In Java i dati membro sono chiamati attributi e le funzioni membro metodi
OOP in C++ Classi e Oggetti Una classe èuntipochehavariabili ha membro (dati membro) e funzioni membro In Java i dati membro sono chiamati attributi e le funzioni membro metodi Una variabile ab di un tipo
DettagliLaboratorio di Algoritmi e Strutture Dati. Esercizi
Laboratorio di Algoritmi e Strutture Dati Esercizi Teresa M.A. Basile basile@di.uniba.it Dipartimento di Informatica Università degli Studi di Bari Aldo Moro 1 Operatori Indispensabili Ogni Classe che
DettagliCorso di Laboratorio 2 Programmazione C++ Silvia Arcelli. 24 Ottobre 2014
Corso di Laboratorio 2 Programmazione C++ Silvia Arcelli 24 Ottobre 2014 1 Una funzione membro importante: il costruttore In logica OOP l accesso allo stato interno di un istanza deve avvenire solo attraverso
DettagliCorso di Programmazione ad Oggetti
Corso di Programmazione ad Oggetti Costruttori di copia, funzioni di accesso e variabili static aa 2008/2009 Claudio De Stefano Claudio De Stefano - Corso di Programmazione ad Oggetti - aa 2008/2009 1
DettagliOverloading di Operatore
Overloading di Operatore Perche' In C++ si creano e manipolano dei tipi di dato creati dall utente (il programmatore) Il C++ mette a disposizione degli strumenti per creare e distruggere gli oggetti creati
DettagliCostruttori/distruttori. Sovraccarico degli operatori. Costruttori/distruttori. Necessità di un cotruttore
Costruttori/distruttori. Sovraccarico degli operatori. Costruttori/distruttori Quando un oggetto viene allocato viene eseguita una routine di inizializzazione: il costruttore. Quando viene deallocato si
DettagliEreditarietà. Unità 9. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER
Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione prof. Domenico
DettagliLaboratorio di programmazione
Laboratorio di programmazione Lezione VIII Tatiana Zolo tatiana.zolo@libero.it 1 PROGRAMMAZIONE A OGGETTI Quando si programma a oggetti si scompone il problema in sottogruppi di parti collegate che tengono
DettagliIl linguaggio C++ Ugo de Liguoro
Il linguaggio C++ Ugo de Liguoro Caratteristiche Il C++ è class based; interpreta le classi come tipi; il subtyping coincide con la (chiusura transitiva della) relazione di sottoclasse; è basato sul C
DettagliInformatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1
Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1 Cosa è il C++ E un linguaggio di programmazione derivato dal C Può essere usato per modificare il SO Unix e i suoi derivati (Linux)
DettagliIndice. Il qualificatore const Le funzioni friend Il puntatore this Gli operatori new e delete I membri static La composizione di classi
Le Classi II Parte Indice Il qualificatore const Le funzioni friend Il puntatore this Gli operatori new e delete I membri static La composizione di classi Le classi ed il qualificatore const Il qualificatore
DettagliIl creator di un oggetto è l entità (oggetto o funzione) che crea un oggetto. L owner di un oggetto è l entità responsabile della sua distruzione
Il creator di un oggetto è l entità (oggetto o funzione) che crea un oggetto L owner di un oggetto è l entità responsabile della sua distruzione Creator e owner in generale non coincidono class ExprParser
DettagliOverloading degli operatori
Overloading degli operatori Indice L overloading degli operatori Restrizioni sull overloading degli operatori L overloading degli operatori: le funzioni membro L overloading degli operatori: le funzioni
DettagliFondamenti di Informatica
Programmazione modulare (top-down) Fondamenti di Informatica 15. Funzioni in C++ (parte 1) Problemi complessi Conviene suddividere il programma in sottoprogrammi piu semplici mediante la metodologia di
DettagliStrutture come parametri di funzioni
Strutture come parametri di funzioni int main() { struct PolReg { int numlati; float lunghezzalato; PolReg p1; p1.numlati = 3; p1.lunghezzalato = 10.0; float perimetro = p1.numlati * p1.lunghezzalato;
Dettaglicostruttori e distruttori
Costruttore costruttori e distruttori E un metodo che ha lo stesso nome della classe a cui appartiene: serve per inizializzare un oggetto all atto della sua creazione Ce ne possono essere uno, più di uno,
DettagliC++ funzioni Alberto Ferrari. Alberto Ferrari Programmazione di applicazioni SW
C++ funzioni Alberto Ferrari http://en.cppreference.com FUNZIONI le funzioni caratterizzate da nome, parametri (numero, ordine e tipo) e tipo di ritorno le funzioni hanno un prototipo il prototipo non
DettagliTemplate (1) Molte volte l operato di una funzione o le proprietà di una classe non dipendono dal tipo dei dati coinvolti
Template (1) Molte volte l operato di una funzione o le proprietà di una classe non dipendono dal tipo dei dati coinvolti int sumvector(int *array, int n) { int sum(0); for (int i = 0; i < n; ++i) sum
DettagliProgrammazione Java Struttura di una classe, Costruttore, Riferimento this
Programmazione Java Struttura di una classe, Costruttore, Riferimento this romina.eramo@univaq.it http://www.di.univaq.it/romina.eramo/tlp Roadmap > Struttura di una classe > Costruttore > Riferimento
DettagliProgrammazione ad oggetti
Programmazione ad oggetti OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha l obiettivo di formalizzare gli oggetti del mondo reale e di costruire con questi un mondo virtuale.
DettagliReti di Connessione e Instradamento AA
Politecnico di Milano Dipartimento di Elettronica e Informazione Reti di Connessione e Instradamento AA. 2010-2011 Cenni sulla programmazione a oggetti con il C++ Massimo Tornatore (Autore delle slide:
DettagliProgrammazione Java Struttura di una classe, Costruttore, Riferimento this
Programmazione Java Struttura di una classe, Costruttore, Riferimento this Davide Di Ruscio Dipartimento di Informatica Università degli Studi dell Aquila diruscio@di.univaq.it. Sommario 2 2» Struttura
DettagliDichiarazione di una classe. Dichiarazione ereditarietà
Introduzione Il Java è un linguaggio di programmazione orientato agli oggetti (OOL), perché permette di realizzare in un programma tutti i concetti alla base dell OOP quali: l astrazione dei dati, mediante
DettagliCorso di Fondamenti di Informatica. Puntatori e Allocazione Dinamica
Corso di Fondamenti di Informatica Puntatori e Allocazione Dinamica I puntatori (Richiamo) Il C++ prevede puntatori a dati di qualsiasi natura, semplici o strutturati e puntatori a funzione. In particolare
DettagliFunzioni, Stack e Visibilità delle Variabili in C
Funzioni, Stack e Visibilità delle Variabili in C Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2018/2019 Argomenti del Corso Ogni lezione consta di una spiegazione assistita da slide,
DettagliOggetti. Definizioni di Classi II
Programmazione a Oggetti Definizioni di Classi II Sommario Costruzioni di oggetti Campi e metodi di classe Overloading Istanziazione di oggetti Costruzione di un oggetto Processo complesso che comprende
DettagliCorso di Programmazione ad Oggetti
Corso di Programmazione ad Oggetti Funzioni e classi friend Overloading di operatori aa 2008/2009 Claudio De Stefano 1 Le funzioni friend Nella definzione di una classe è possibile elencare quali funzioni,
DettagliElementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I
Lezione 4 Elementi lessicali e espressioni logiche Matricole 2-3 Elementi lessicali il linguaggio C ha un suo vocabolario di base i cui elementi sono detti token esistono 6 tipi di token: parole chiave
DettagliIl paradigma OO e le Classi
Oggetti e Classi (CAP 10) Alberto Garfagnini Università degli studi di Padova 1 Dicembre 2009 Il paradigma OO e le Classi La programmazione ad Oggetti () è una filosofia di programmazione che si basa sui
DettagliProgrammazione a Oggetti Lezione 8. Definizioni di Classi II
Programmazione a Oggetti Lezione 8 Definizioni di Classi II Sommario Costruzione di un oggetto Processo complesso che comprende varie fasi: 1. Allocare spazio per ogni campo - in ordine testuale - inizializza
DettagliInformatica e Laboratorio di Programmazione C++ Object Oriented Programming Alberto Ferrari
Informatica e Laboratorio di Programmazione C++ Object Oriented Programming Alberto Ferrari oggetti o in C++ la definizione della classe è separata dalla implementazione dei metodi o definizione fornita
DettagliGli oggetti. Ogni oggetto ha un interfaccia e ogni oggetto ha un tipo. Incapsulamento. Oggetti. Contatore. Invio di Messaggi
Gli oggetti Linguaggi di Programmazione: Paradigmi di Programmazione (Sperimentazioni) Matteo Baldoni Dipartimento di Informatica Universita` degli Studi di Torino C.so Svizzera, 185 I-149 Torino Ogni
DettagliOperatore di indirizzo
Operatore di indirizzo L operatore unario di indirizzo & restituisce l indirizzo della locazione di memoria dell operando Il valore restituito non va usato come l- value (in quanto l indirizzo di memoria
DettagliCorso di Programmazione a oggetti
Corso di Programmazione a oggetti Overloading delle funzioni e parametri di default a.a. 2014/2015 Francesco Fontanella Overloading delle funzioni In C++, è possibile dare a funzioni diverse lo stesso
DettagliCorso di Fondamenti di Informatica Il sistema dei tipi in C++
Corso di Fondamenti di Informatica Il sistema dei tipi in C++ Anno Accademico Francesco Tortorella Struttura di un programma C++ // Programma semplice in C++ #include int main() { cout
DettagliVariabili e Funzioni. Informatica 1 / 19
Variabili e Funzioni Informatica 1 / 19 Programmi C e Un programma C e composto da funzioni e variabili Variabile: memorizza valori appartenenti ad un insieme di definizione (dipendente dal tipo) Funzione:
DettagliLa programmazione ad oggetti (Parte 1)
La programmazione ad oggetti (Parte 1) Algoritmicamente November 21, 2009 http://algoritmicamente.wordpress.com/ 1 Introduzione Una proprietà importante del C++ è quella che denisce questo linguaggio come
DettagliLezione 4. Costruttori
Lezione 4 Costruttori e distruttori Costruttori Quando si crea un oggetto di una classe è possibile inizializzarne i membri tramite il costruttore di classe Il costruttore è una funzione membro che ha
DettagliSommario. Introduzione... xv. Giorno 1 Elementi base del linguaggio C
Sommario Introduzione... xv Organizzazione del volume... xv Argomenti...xvi Domande...xvi Verifiche...xvi Domande e risposte...xvi Esercizi...xvi Non è richiesta alcuna precedente esperienza di programmazione...
DettagliDefinizione di classi
Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione prof. Domenico
DettagliStruttura di un programma C++
Struttura di un programma C++ // Programma semplice in C++ #include using namespace std; int main() { cout
DettagliIl linguaggio C. Notate che...
Il linguaggio C Notate che... 1 Il C è un linguaggio a blocchi int main (void) { blocco } 2 Il C è un linguaggio a blocchi (2) Non è possibile mischiare dichiarazioni e comandi! int main (void) { } Dichiarazione
DettagliDati due punti sul piano calcolare la loro distanza
Introduzione al C Primo esempio in C Dati due punti sul piano calcolare la loro distanza Soluzione: la distanza fra due punti si calcola secondo il teorema di Pitagora, con la formula: y Distanza = (lato12
DettagliCorso di Programmazione a oggetti
Corso di Programmazione a oggetti Introduzione alla programmazione a oggetti aa 2014/2015 Francesco Fontanella La Programmazione Modulare Un programma può essere visto come un insieme di moduli che interagiscono
DettagliUNIVERSITA DEGLI STUDI ROMA TRE DIPARTIMENTO DI MATEMATICA E FISICA
UNIVERSITA DEGLI STUDI ROMA TRE DIPARTIMENTO DI MATEMATICA E FISICA Laboratorio di Programmazione e Calcolo Cognome:... A.A. 2017-18 Nome:... Test Finale con Soluzioni Matricola:... Roma, 18 gennaio 2018
DettagliSommario. Esempio. Esempio: Canzone.h #ifndef CANZONE_H #define CANZONE_H. Esempio: Canzone.cpp
Sommario Classi e oggetti, un esempio: Oggetti in memoria stack e in memoria heap Oggetti e funzioni Oggetti ed array Il puntatore implicito this Costruttore: Lista di inizializzazione dei membri Tipo
DettagliFondamenti di Informatica II 3. Funzioni in C++ (parte 1)
Introduzione alle funzioni in C++ Fondamenti di Informatica II 3. Funzioni in C++ (parte 1) Corso di Laurea in Ingegneria Informatica A.A. 2008-2009 2 Semestre Corso (A-M) int main() int n, fattoriale=1;
DettagliCorso di Informatica A.A
Corso di Informatica A.A. 2009-2010 Lezione 10 Lezione 10 1 Inside C : Puntatori Puntatori Referenziazione e Dereferenziazione Pointers: Puntatori Le variabili finora incontrate sono caratterizzate da
DettagliFondamenti di Programmazione Prof.ssa Elisa Tiezzi. Programmazione orientata a oggetti
Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti 1 Programmazione OO Concetti base: dati istruzioni Dati: variabili tipi Istruzioni: istruzioni base strutture di controllo
DettagliUtilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali:
1 Tipi di dati 1 Tipi di dati Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali: Tutto è un oggetto Tutto eredita implicitamente
DettagliLaboratorio di Informatica
Record Laboratorio di Informatica Ingegneria Meccanica Lezione 9, 6 dicembre 2007 versione 18 dicembre 2007 Renato Menicocci Array: collezione di dati omogenei
DettagliQuando è necessario elaborare una certa quantità di dati omogenei si possono usare variabili indicizzate: int a0, a1, a2;
Array Quando è necessario elaborare una certa quantità di dati omogenei si possono usare variabili indicizzate: int a0, a1, a2; Il C supporta questo uso attraverso il tipo di dati array (o vettore): int
DettagliFunzioni matematiche
int int main() main() double r, theta, phi; return return 0; 0; Funzioni matematiche In C++ non esistono funzioni predefinite #include #include cin >> r >> theta >> phi ; double x =
Dettagli14 - Metodi e Costruttori
14 - Metodi e Costruttori Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it
DettagliUnità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma.
Unità Didattica 1 Linguaggio C Fondamenti. Struttura di un programma. 1 La storia del Linguaggio C UNIX (1969) - DEC PDP-7 Assembly Language BCPL - un OS facilmente accessibile che fornisce potenti strumenti
DettagliA. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas
Classi e oggetti A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas Oggetti La programmazione orientata agli oggetti, OOP (Object-Oriented Programming),
DettagliLaboratorio di programmazione
Laboratorio di programmazione Lezione X Tatiana Zolo tatiana.zolo@libero.it 1 Proprietà fondamentale dei linguaggi object-oriented. Classe A classe base (o superclasse) classe da cui si eredita Classe
DettagliLaboratorio di Algoritmi e Strutture Dati
Realizzazione di Liste (II) Laboratorio di Algoritmi e Strutture Dati Domenico Redavid redavid@di.uniba.it Materiale di base gentilmente concesso dal dott. Nicola Di Mauro Ricercatore presso l'univ. di
DettagliFondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati
Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati Paolo Torroni Dipartimento di Elettronica, Informatica e Sistemistica Università degli Studi di Bologna Anno Accademico 2008/2009 Sommario
DettagliLllezione 12 Template. Template. Lezione 12
Lezione 12 Cosa è un Il template è un meccanismo che consente di creare uno schema generico di funzione o di classe, che non fa esplicito riferimento a nessun particolare tipo di dati utile quando si devono
DettagliLllezione 12 Template
Lezione 12 Cosa è un Il template è un meccanismo che consente di creare uno schema generico di funzione o di classe, che non fa esplicito riferimento a nessun particolare tipo di dati utile quando si devono
DettagliLaboratorio di Programmazione Anno Accademico
Università di Roma La Sapienza, Facoltà di Ingegneria Corso di Laboratorio di Programmazione Anno Accademico 2004-2005 Corso di Laurea in Ingegneria Informatica Prof. Giuseppe De Giacomo (A L) & Prof.
DettagliEsiste però anche un ambiente globale: quello dove tutte le funzioni sono definite. Qui si possono anche definire variabili, dette variabili globali
AMBIENTE LOCALE E GLOBALE In C, ogni funzione ha il suo ambiente locale che comprende i parametri e le variabili definite localmente alla funzione Esiste però anche un ambiente globale: quello dove tutte
DettagliEsiste però anche un ambiente globale: quello dove tutte le funzioni sono definite. Qui si possono anche definire variabili, dette variabili globali
AMBIENTE LOCALE E GLOBALE In C, ogni funzione ha il suo ambiente locale che comprende i parametri e le variabili definite localmente alla funzione Esiste però anche un ambiente globale: quello dove tutte
DettagliI tipi strutturati e i record in C++
I tipi strutturati e i record in C++ Docente: Ing. Edoardo Fusella Dipartimento di Ingegneria Elettrica e Tecnologie dell Informazione Via Claudio 21, 4 piano laboratorio SECLAB Università degli Studi
DettagliCorso di Programmazione ad Oggetti
Corso di Programmazione ad Oggetti I Template a.a. 2008/2009 Claudio De Stefano 1 Programmazione generica E una tecnica di programmazione che permette di definire una classe di oggetti (o una funzione)
DettagliOggetti. La programmazione orientata agli oggetti, OOP (Object-Oriented Programming), prende il nome dall elemento su cui si basa, l oggetto.
Classi e oggetti Oggetti La programmazione orientata agli oggetti, OOP (Object-Oriented Programming), prende il nome dall elemento su cui si basa, l oggetto. OOP Vantaggi facilità di lettura e di comprensione
DettagliBreve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN
Breve Manuale di Riferimento sulla Sintassi Linguaggi e versione aggiornata al 05/02/2004 Sommario Elementi di Base... 2 Dati, Tipi e Dichiarazioni... 2 Tipi di Dato di Base... 2 Tipi di Dato Strutturati...
DettagliEsercitazioni sulle classi
Esercitazioni sulle classi Armando Stellato stellato@info.uniroma2.it 1 Classi Possiamo vederle, da un punto di vista sintattico, come una estensione delle strutture, ma sono caratterizzate da notevoli
DettagliAGGIORNAMENTI RECENTI IN C++ Programmazione ad Oggetti Corso di Laurea in Informatica Università della Calabria
AGGIORNAMENTI RECENTI IN C++ Programmazione ad Oggetti Corso di Laurea in Informatica Università della Calabria C++0x/C++11/C++14/C++17 : Cosa sono? C++ ha subito molti miglioramenti da quando è stato
DettagliDefinizione di classi. Walter Didimo
Definizione di classi Walter Didimo Definizione di classi Fino ad ora abbiamo imparato a: creare oggetti da classi già pronte usare gli oggetti creati, invocando metodi la creazione e l uso di oggetti
DettagliAssegnazione di una variabile
Assegnazione di una variabile Per scrivere un valore dentro una variabile si usa l operatore di assegnazione, che è rappresentato dal simbolo =. Quindi, se scrivo int a; a = 12; assegno alla variabile
DettagliProgettazione del Software Anno Accademico Tipi di dato in Java
Università di Roma La Sapienza, Facoltà di Ingegneria Corso di Progettazione del Software Anno Accademico 2003-2004 Corso di Laurea in Ingegneria Gestionale Prof. Monica Scannapieco (A L) & Prof. Giuseppe
DettagliIl linguaggio C Strutture
Il linguaggio C Strutture Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ Linguaggio C -- Strutture 2 Ringraziamenti Questi
DettagliIl puntatore alla classe base e le funzioni virtuali
Polimorfismo Indice Le funzioni virtuali e il puntatore alla classe base Le funzioni virtuali pure Classi astratte: interfaccia Commenti sugli strumenti del C++ e l OOD Il puntatore alla classe base e
DettagliStrutture, Unioni, Enumerazioni in C. Emilio Di Giacomo
Strutture, Unioni, Enumerazioni in C Emilio Di Giacomo Strutture Una struttura è una collezione di variabili raggruppate sotto uno stesso nome da questo punto di vista è simile a un array Le variabili
DettagliProgrammazione M.A. Alberti. Comunicazione digitale AA 2009/ Classi in Java 1. Le classi in Java. Oggetti. Classi. Classi. Visibilità dei dati
Oggetti Le classi in Java Corso di laurea in Un oggetto è definito dal suo stato - descrive le sue caratteristiche comportamento - quello che può fare Ad esempio: il modello di una moneta Una moneta può
DettagliI numeri razionali. Specifica: la sintassi. Specifica: la semantica
Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi Che cos è un tipo di dato? Tutti i linguaggi di programmazione tipati forniscono tipi ed operatori predefiniti
DettagliFondamenti di Informatica Ing. Biomedica
Fondamenti di Informatica Ing. Biomedica Esercitazione n.10 Strutture Antonio Arena antonio.arena@ing.unipi.it Ripresa esercizio per casa Fondamenti di Informatica - Esercitazione n.10 2 Scrivere una funzione
DettagliEreditarietà gerarchica
Ereditarietà Ereditarietà L ereditarietà è importante per la creazione di software riutilizzabile e per controllare la complessita del codice Le classi nuove sono progettate sulla base di classi pre-esistenti
DettagliCorso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I)
Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I) Ing. Gianluca Caminiti Sommario ( OOP ) Programmazione Object-Oriented Incapsulamento, Ereditarietà, Polimorfismo Richiami
Dettagli#include <stdio.h> /* l esecuzione comincia dalla funzione main */ int main()
Primi passi Il mio primo programma #include /* l esecuzione comincia dalla funzione main */ int main() { printf( Hello World!\n" ); return 0; /* il programma termina con successo */ } /* fine
DettagliProgrammazione ad oggetti
Programmazione ad oggetti Tipi di dati Tipo = insieme di valori + insieme di operazioni Es. int: valori:, -2, -1, 0, 1, 2, operazioni:: +,-,*,/,
DettagliProgrammazione orientata agli oggetti La classe Object, metodi e classi final, this. Object
Programmazione orientata agli oggetti La classe, metodi e classi final, this 1 La classe Negli esempi fatti nella prima parte del corso abbiamo definito alcune classi, per esempio Counter e Orologio, senza
DettagliSEZIONE 2 Introduzione al copy constructor e ad operator overloading
SEZIONE 2 Introduzione al copy constructor e ad operator overloading void f(pila s) { s.estrai(); s.inserisci(3); cout
DettagliAncora sulle Classi in C++ e Java. this
Ancora sulle Classi in C++ e Java this Classe: riepilogo gestione memoria ogg1: oggetto di invocazione del metodo ogg: parametro fornito al metodo!"# ogg1 ogg2 ogg metodoa metodob varv varw varx varv varw
DettagliFunzioni, puntatori, strutture. Lab. Calc. AA 2006/07
Funzioni, puntatori, strutture sommario In questa lezione integriamo le informazioni fornite su puntatori e funzioni approfondendo i seguenti punti Puntatori a puntatori Puntatori e array come parametri
DettagliCapitolo 10 - Strutture
1 Capitolo 10 - Strutture Strutture In molte situazioni, una variabile non è sufficiente per descrivere un oggetto. Ad esempio, una posizione sul piano cartesiano è identificata da due coordinate, e la
DettagliProgrammazione orientata agli oggetti La classe Object, metodi e classi final, this. Object
Programmazione orientata agli oggetti La classe, metodi e classi final, this 1 La classe Negli esempi fatti nella prima parte del corso abbiamo definito alcune classi, per esempio Counter e Orologio, senza
DettagliGestione dinamica della memoria
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 Gestione dinamica della memoria Pietro Di Lena - pietro.dilena@unibo.it A pessimistic programmer sees the array as half empty.
Dettagli