Overloading di operatori

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Overloading di operatori"

Transcript

1 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 : 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 Laboratorio di Informatica Antonio Monteleone 69

2 Overloading di operatori (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 Laboratorio di Informatica Antonio Monteleone 70

3 Overloading di operatori (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 f. membro #include <iostream> #include complex.h void main { Complex c1(1, 2); cout << c1; // operando sx non di tipo Complex no f. membro ostream & operator << (ostream & os, const Complex &c); Laboratorio di Informatica Antonio Monteleone 71

4 Operatori unari sono implementati come metodi senza argomenti (l oggetto è l argomento implicito) class Date { public: Date(int d, int m, int y); Date & operator++(); //preincr. ; Overloading di operatori (4) funzioni friend a un solo argomento void main() { Date d(12,03,2002); ++d; // d.operator++(); class Date { public: Date(int d, int m, int y); friend Date & operator++(date &); ; Date & operator++(date &); void main() { Date d(12,03,2002); ++d; // operator++(d); Laboratorio di Informatica Antonio Monteleone 72

5 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); Laboratorio di Informatica Antonio Monteleone 73

6 friend 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 Laboratorio di Informatica Antonio Monteleone 74

7 friend (2) friend e` nemico dell incapsulamento e quindi dell OOP Un uso eccessivo di friend è quasi sempre sintomo di un cattivo disegno Esistono però situazioni in cui l uso di friend può essere accettabile Overloading di operatori binari Considerazioni di efficienza Relazione speciale fra due classi Laboratorio di Informatica Antonio Monteleone 75

8 Ogni oggetto puo accedere al proprio indirizzo tramite un puntatore di nome this Il valore di this non puo essere cambiato this 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; ; void main(){ Time t(12,03,58); t.sethour(11).setmin(8); Time & Time::setHour(int h) { hh = (h>0 && h <24)? h : 0; return *this; Laboratorio di Informatica Antonio Monteleone 76

9 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 versione di default di tale operatore che effettua una copia degli oggetti membro a membro Laboratorio di Informatica Antonio Monteleone 77

10 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 Laboratorio di Informatica Antonio Monteleone 78

11 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; Laboratorio di Informatica Antonio Monteleone 79

12 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 Laboratorio di Informatica Antonio Monteleone 80

13 Sul valore di ritorno degli operatori Nell overloading degli operatori ci sono dei casi in cui è necessario restituire un oggetto per valore e altri in cui è necessario restituirlo per riferimento. T operator+(const T &a, const T &b); T &T::operator=(const T &rhs); E anche opportuno restituire un oggetto costante ogni volta questo è possibile. const T operator+(const T &a, const T &b); Laboratorio di Informatica Antonio Monteleone 81

14 #include point.h #include <iostream> using namespace std; using namespace labinfo; int main() { Point a(1,2), b(2,3); cout << (a += b); assert(a == Point(3, 5)); Sul valore di ritorno degli operatori Point c, d; c = d = b; // c = (d = b) o c.operator=(d.operator=(b)); assert(c == Point(2, 3)); (c = a).x = 10; // il valore di ritorno di operator= deve essere Point & assert(c.x == 10); cout << (d += a + b); assert(d == Point(7, 11)); Laboratorio di Informatica Antonio Monteleone 82

15 // continua il main Sul valore di ritorno degli operatori (d += a + b) += a; assert(d == Point(15, 24)); // (a + b).rotate(0.5); // errore se a + b restituisce un const Point e // Point::rotate non è const assert(a!= b); // (-a).rotate(b, 11); // errore se -a restituisce un const Point e // Point::rotate non è const // end of main Laboratorio di Informatica Antonio Monteleone 83

16 // point.h #include <cmath> namespace labinfo { Sul valore di ritorno degli operatori class Point { public: Point(double _x=0, double _y=0) : x(_x), y(_y) {; inline Point& operator+=(const Point &a) { x+=a.x; y+=a.y; return *this; inline Point& operator-=(const Point &a) { x-=a.x; y-=a.y; return *this; inline void rotate(const Point &p, double alpha) { x = (x-p.x)*cos(alpha) - (y-p.y)*sin(alpha) + p.x; y = (x-p.x)*sin(alpha) + (y-p.y)*cos(alpha) + p.y; inline void scale(double a, double b) { x *= a; y *= b; inline void scale(double a) { scale(a,a); double x, y; ; Laboratorio di Informatica Antonio Monteleone 84

17 Sul valore di ritorno degli operatori // inline const Point operator+(const Point &a, Point &b) { return Point(a)+=b; inline const Point operator-(const Point &a, Point &b) { return Point(a)-=b; ; inline const Point operator-(const Point &a) { return Point(-a.x,-a.y); // inline double operator*(const Point &a, const Point &b) { return a.x*b.x+a.y*b.y; // inline ostream & operator<<(ostream &out, Point &p) { return out << "(" << p.x << ", " << p.y << ")"; Laboratorio di Informatica Antonio Monteleone 85

18 Sul valore di ritorno degli operatori // inline const Point operator*(int a, const Point &p) { return Point(a*p.x,a*p.y); // inline const Point operator*(const Point &p, int a) { return Point(a*p.x,a*p.y); // inline bool operator==(const Point &p1, const Point &p2) { return (p1.x == p2.x && p1.y == p2.y); // bool operator!=(const Point &p1, const Point &p2) { return!(p1 == p2); // namespace labinfo Laboratorio di Informatica Antonio Monteleone 86

19 Sul valore di ritorno degli operatori Conclusioni: Ogniqualvolta una funzione operatore produce un nuovo oggetto questi deve essere restituito per valore. Se l oggetto restituito deve essere utilizzato solo come l-value allora conviene renderlo anche costante. Se l oggetto restituito deve essere utilizzato come r-value ( lo si deve modificare) allora questi deve essere restituito come riferimento (all oggetto su cui la funzione operatore è invocata). Laboratorio di Informatica Antonio Monteleone 87

20 Considerazioni su op= e op Potendo scrivere a = a + b; ci si potrebbe aspettare di poter scrivere anche a += b; Per i tipo definiti dall'utente non esiste nessuna relazione implicita tra operator= e operator+= e per poterli utilizzare entrambi è necessario definirli entrambi. Laboratorio di Informatica Antonio Monteleone 88

21 class Integer { public: Integer(int i) : m_value(i) { Integer &operator+=(const Integer &i) { m_value += i.m_value; return *this; bool operator==(const Integer &rhs) { return m_value == rhs.m_value; // int m_value; ; Considerazioni su op= e op E possibile implementare operator+ in termini di operator+= const Integer operator+(const Integer &a, const Integer &b) { return Integer(a) += b; La presenza di un oggetto senza nome facilita la Return Value Optimization (RVO) Laboratorio di Informatica Antonio Monteleone 89

22 Considerazioni su op= e op E' possibile rendere generica l implementazione di operator@ in termini di operator@= // math_ops.h // altre funzioni operatore template<typename T> const T operator+(const T & a, const T & b) { return T(a)+=b; template<typename T> const T operator-(const T & a, const T & b) { return T(a)-=b; // altre funzioni operatore La semplice inclusione di math_ops.h rende disponibile operator@ per le classi che definiscono operator@= uguale a +,-,*, ) In generale la versione op= di un operatore è sempre più efficiente della op Laboratorio di Informatica Antonio Monteleone 90

23 Operatori di incremento e decremento Gli operatori di incremento e decremento sono disponibili sia nella forma prefissa che in quella post-fissa. class Time { public: Time(int h=0, int m=0, int s=0) :m_h(h%24), m_m(m%60), m_s(s%60) { int gethour() { return m_h; int getmin () { return m_m; int getsec () { return m_s; void sethour(int h) { m_h = h%24; void setmin (int m) { m_m = m%60; void setsec (int s) { m_s = s%60; Time & operator++(); // incremento prefisso const Time operator++(int); // incremento post-fisso bool operator==(const Time &t) const; void print(ostream &os) const; private: int m_h, m_m, m_s; ; Laboratorio di Informatica Antonio Monteleone 91

24 Operatori di incremento e decremento ostream & operator <<(ostream &os, const Time &t) { t.print(os); return os; // incremento pre-fisso Time & Time::operator++() { m_s = (++m_s) % 60; if (m_s == 0) { m_m = (++m_m) % 60; if (m_m == 0) m_h = (++m_h) % 24; return *this; // ---- incremento post-fisso const Time Time::operator++(int) { Time old = *this; ++(*this); return old; Laboratorio di Informatica Antonio Monteleone 92

25 Operatori di incremento e decremento bool Time::operator==(const Time &t) const { return m_h == t.m_h && m_m == t.m_m && m_s == t.m_s; Nell uso della class Time Time time(10, 12, 55); ++time; // viene chiamato time.operator++() time++; // viene chiamato time.operator++(0) Con un tipo predefinito è possibile effettuare un doppio incremento prefisso int i = 10; ++++i; // dopo il doppio incremento prefisso i vale 12 Time time(10, 12, 55); ++++time; // time.operator++().operator++() assert(time == Time(10, 12, 57); Affinché il doppio incremento modifichi l'oggetto a cui è applicato e' necessario che l'operatore di incremento prefisso restituisca un riferimento a tale oggetto. Laboratorio di Informatica Antonio Monteleone 93

26 Operatori di incremento e decremento Per il doppio incremento post-fisso int i = 10; i++++; // tale espressione è sintatticamente sbagliata Leggendo tale espressione ci si aspetta un doppio incremento del valore di i. In realtà il valore dell'espressione i++ è il valore di i prima del primo incremento. Il secondo incremento agirebbe su tale valore e alla fine i sarebbe incrementato solo una volta e non due come ci si potrebbe aspettare. Per evitare ogni confusione il compilatore considera errata tale espressione. Laboratorio di Informatica Antonio Monteleone 94

27 Operatori di incremento e decremento Nell'overloading di un operatore è opportuno essere consistenti col comportamento dello stesso operatore sui tipi predefiniti. Per evitare che espressioni del tipo Time time(10, 12, 55); time++++; // time.operator++(0).operator++(0) siano considerate lecite è sufficiente che l'operatore di incremento post-fisso restituisca un oggetto costante (su un oggetto costante si possono invocare solo funzioni membro costanti) Raccomandazione: Quando possibile è sempre meglio utilizzare la forma prefissa di un operatore di incremento/decremento poiché tale forma evita la costruzione e la successiva distruzione di un oggetto temporaneo Laboratorio di Informatica Antonio Monteleone 95

28 Operatori di conversione In C e C++ il compilatore può eseguire dei cast impliciti da un tipo a un altro. void f1(double d) { void f2() { int i=10; f1(i); // promozione da int a double Le conversioni implicite tra tipi possono coinvolgere operatori di conversione definiti dall utente. class MyClass1 { public: // operator dst_type ( ); ; void f(){ MyClass1 cc; dst_type aa = cc; // conversione da MyClass1 a dst_type Laboratorio di Informatica Antonio Monteleone 96

29 Operatori di conversione Le conversioni implicite tra tipi possono coinvolgere costruttori con un solo argomento che di fatto agiscono come operatori di conversione class MyClass2 { public: MyClass2(int a); // ; void f(){ MyClass2 cc; cc = 10; // conversione da int a MyClass2 Anche se tali operatori di conversione possono rivelarsi utile, è opportuno utilizzarli con molta cautela. Laboratorio di Informatica Antonio Monteleone 97

30 Operatori di conversione template <typename T> class ASmartPointer { public: ASmartPointer(T *pointer=0) : m_pointer(pointer) { ~ASmartPointer() { delete m_pointer; T *operator->() { return m_pointer; T &operator*() { return *m_pointer; operator bool () { return m_pointer!= 0; private: ASmartPointer(const ASmartPointer &); void operator=(const ASmartPointer &); T *m_pointer; ; void testasmartpointer() { ASmartPointer<Point> sp1(new Point(1,1)); ASmartPointer<Point> sp2(new Point(2,2)); if (sp1 == sp2) cout << "non e' come sembra" << endl; Laboratorio di Informatica Antonio Monteleone 98

31 Operatori di conversione class IntArray { public: IntArray(int n) : m_size(n), m_array(new int [n]) { IntArray(const IntArray &rhs) { //... ~IntArray() { delete [] m_array; IntArray &operator=(const IntArray &rhs) { //... return *this; int & operator[] (int i) { return m_array[i]; private: int m_size; int *m_array; ; void testintarray() { IntArray ia(6); for (int i=0; i<6; ++i) ia[i] = i; ia = 5; // un errore di battitura // a ia viene assegnato un IntArray di 5 // elementi Laboratorio di Informatica Antonio Monteleone 99

32 Operatori di conversione E possibile impedire una conversione implicita di tipo attraverso un costruttore mediante l uso della parola chiave explicit class IntArray { public: explicit IntArray(int n) : m_size(n), m_array(new int [n]) { IntArray(const IntArray &rhs) { //... ~IntArray() { delete [] m_array; IntArray &operator=(const IntArray &rhs) { //... //... private: int m_size; int *m_array; ; void testintarray() { IntArray ia(6); for (int i=0; i<6; ++i) ia[i] = i; ia = 5; // grazie a explicit non compila Laboratorio di Informatica Antonio Monteleone 100

Template (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 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

Dettagli

Costruttori/distruttori. Sovraccarico degli operatori. Costruttori/distruttori. Necessità di un cotruttore

Costruttori/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

Dettagli

Corso di Programmazione ad Oggetti

Corso 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,

Dettagli

Corso di Fondamenti di Informatica. Puntatori e Allocazione Dinamica

Corso 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

Dettagli

Oggetti funzione (1) Laboratorio di Informatica Antonio Monteleone 177

Oggetti funzione (1) Laboratorio di Informatica Antonio Monteleone 177 Oggetti funzione (1) In C++ è possibile ridefinire l operatore di chiamata a funzione operator() valore_di_ritorno operator() (lista_argomenti); Un oggetto funzione è l istanza di una classe per la quale

Dettagli

La programmazione ad oggetti (OOP)

La 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

Dettagli

Laboratorio di Algoritmi e Strutture Dati

Laboratorio 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

Dettagli

Corso di Fondamenti di Informatica Il sistema dei tipi in C++

Corso 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

Dettagli

Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1

Informatica 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)

Dettagli

Corso di Laboratorio 2 Programmazione C++ Silvia Arcelli. 24 Ottobre 2014

Corso 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

Dettagli

Ereditarietà gerarchica

Ereditarietà 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

Dettagli

Il paradigma OO e le Classi

Il 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

Dettagli

Corso di Fondamenti di Informatica

Corso di Fondamenti di Informatica Corso di Fondamenti di Informatica Il tipo puntatore; l allocazione dinamica della memoria Claudio De Stefano - Corso di Fondamenti di Informatica 1 puntatori una variabile di tipo puntatore al tipo x

Dettagli

Corso di Programmazione ad Oggetti

Corso 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

Dettagli

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Elementi 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

Dettagli

Operatore di indirizzo

Operatore 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

Dettagli

Sommario. Introduzione... xv. Giorno 1 Elementi base del linguaggio C

Sommario. 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...

Dettagli

Fondamenti di Programmazione Ingegneria dell Automazione Industriale Ingegneria Elettronica e delle Comunicazioni

Fondamenti di Programmazione Ingegneria dell Automazione Industriale Ingegneria Elettronica e delle Comunicazioni Fondamenti di Programmazione Ingegneria dell Automazione Industriale Ingegneria Elettronica e delle Comunicazioni Alessandro Saetti & Marco Sechi (email: saetti,marco.sechi@ing.unibs.it) Università degli

Dettagli

Università degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Stringhe. Anno Accademico 2010/2011 Francesco Tortorella

Università degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Stringhe. Anno Accademico 2010/2011 Francesco Tortorella Corso di Informatica Tipi strutturati: Stringhe Anno Accademico 2010/2011 Francesco Tortorella Stringhe di caratteri La stringa è il tipo strutturato con cui vengono rappresentati gruppi di caratteri quali

Dettagli

La classe std::vector della Standard Template Library del C++

La classe std::vector della Standard Template Library del C++ La classe std::vector della Standard Template Library del C++ Alberto Garfagnini Università degli studi di Padova 23 Ottobre 2013 Programmazione generica in C++ : i Template I templates sono probabilmente

Dettagli

Introduzione al linguaggio C Puntatori

Introduzione al linguaggio C Puntatori Introduzione al linguaggio C Puntatori Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 19 ottobre 2016

Dettagli

Corso di Programmazione a oggetti

Corso 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

Dettagli

Un esecutore di un linguaggio simbolico e costituito dalla coppia Compilatore, processore (o Interprete, processore)

Un esecutore di un linguaggio simbolico e costituito dalla coppia Compilatore, processore (o Interprete, processore) Un esecutore di un linguaggio simbolico e costituito dalla coppia Compilatore, processore (o Interprete, processore) Macchina astratta: un linguaggio di programmazione trasforma un calcolatore in una macchina

Dettagli

Università degli Studi di Cassino e del Lazio Meridionale Corso di Fondamenti di Informatica Allocazione dinamica di memoria

Università degli Studi di Cassino e del Lazio Meridionale Corso di Fondamenti di Informatica Allocazione dinamica di memoria di Cassino e del Lazio Meridionale Corso di Informatica Allocazione dinamica di memoria Anno Accademico 2015/2016 Francesco Tortorella Allocazione dinamica di memoria Finora abbiamo considerato variabili

Dettagli

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++ Programmazione Procedurale in Linguaggio C++ Elementi di Base Parte 3 Istruzioni di Assegnazione G. Mecca M. Samela Università della Basilicata Elementi di Base >> Sommario Sommario Introduzione Istruzioni

Dettagli

POINTERS. Una variabile pointer è una variabile che ha come valore un indirizzo di memoria.

POINTERS. Una variabile pointer è una variabile che ha come valore un indirizzo di memoria. POINTERS Una variabile pointer è una variabile che ha come valore un indirizzo di memoria. Es. Sia y una variabile intera di valore e sia yptr una variabile pointer avente come valore l indirizzo di y.

Dettagli

Laboratorio di programmazione

Laboratorio 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

Dettagli

Capitolo 10 - Strutture

Capitolo 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

Dettagli

I Template in C++ Corso di Linguaggi di Programmazione ad Oggetti 1. a cura di: Giancarlo Cherchi

I Template in C++ Corso di Linguaggi di Programmazione ad Oggetti 1. a cura di: Giancarlo Cherchi I Template in C++ Corso di Linguaggi di Programmazione ad Oggetti 1 a cura di: Giancarlo Cherchi Introduzione Cosa sono i Template? TEMPLATE? MODELLI Funzionalità non presenti nelle prime versioni del

Dettagli

C: panoramica. Violetta Lonati

C: panoramica. Violetta Lonati C: panoramica Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010 Violetta Lonati

Dettagli

Linguaggio C. Tipi predefiniti e operatori. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Linguaggio C. Tipi predefiniti e operatori. Università degli Studi di Brescia. Docente: Massimiliano Giacomin Linguaggio C Tipi predefiniti e operatori Università degli Studi di Brescia Docente: Massimiliano Giacomin Elementi di Informatica e Programmazione Università di Brescia 1 RICHIAMI char 8 bit Valori interi

Dettagli

Corso 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) 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

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

Programmazione 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

Dettagli

Implementazione dell albero binario in linguaggio C++

Implementazione dell albero binario in linguaggio C++ Implementazione dell albero binario in linguaggio C++ Costruire il programma per gestire le operazioni su un albero binario. Ogni nodo dell albero contiene un codice e una descrizione; il programma deve

Dettagli

Classi e array. Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array

Classi e array. Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array Classi e array Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array Si vuole definire una classe Polinomio per la rappresentazione di polinomi a

Dettagli

Programmazione ad oggetti

Programmazione ad oggetti Programmazione ad oggetti Tipi di dati Tipo = insieme di valori + insieme di operazioni Es. int: valori:, -2, -1, 0, 1, 2, operazioni:: +,-,*,/,

Dettagli

Corso di Fondamenti di Informatica

Corso di Fondamenti di Informatica Corso di Fondamenti di Informatica Introduzione alla programmazione in C++ 1 Un introduzione Che cosa è il C++? La programmazione procedurale La programmazione orientata agli oggetti La programmazione

Dettagli

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas

A. 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),

Dettagli

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Variabili. Unità 2. 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

Dettagli

Fondamenti di Informatica

Fondamenti di Informatica Passaggio di parametri in C++ Il passaggio dei parametri tra funzione chiamante e funzione chiamata in C++ avviene secondo due modalità: Fondamenti di Informatica 16. Funzioni in C++ (parte 2) per valore

Dettagli

Espressioni. Espressione = meccanismo fondamentale per esprimere computazioni in un LP importante comprenderne la semantica!

Espressioni. Espressione = meccanismo fondamentale per esprimere computazioni in un LP importante comprenderne la semantica! Espressioni Espressione = meccanismo fondamentale per esprimere computazioni in un LP importante comprenderne la semantica! Valutazione automatica di expr aritmetiche = obiettivo primario dei primi LP

Dettagli

Dal C al C++ Corso di Linguaggi di Programmazione ad Oggetti 1. a cura di Giancarlo Cherchi

Dal C al C++ Corso di Linguaggi di Programmazione ad Oggetti 1. a cura di Giancarlo Cherchi Dal C al C++ Corso di Linguaggi di Programmazione ad Oggetti 1 a cura di Giancarlo Cherchi 1 Commenti Non aumentano la dimensione del programma eseguibile ma si rivelano utili per riassumere il comportamento

Dettagli

Laboratorio di Programmazione Anno Accademico

Laboratorio 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.

Dettagli

Esercizio 2: Algebra dei Puntatori e Puntatori a Puntatori

Esercizio 2: Algebra dei Puntatori e Puntatori a Puntatori Esercizio 2: Algebra dei Puntatori e Puntatori a Puntatori Salvatore Mandrà 7 Ottobre 2008 1 Esercizio L esercizio prevede l implementazione di funzioni per il prodotto di una matrice per un vettore, attraverso

Dettagli

Indice. Ordine di valutazione. Espressioni in C++ Le espressioni in C++ (CAP 4) Alberto Garfagnini e Marco Mazzocco A.A. 2014/ * 20 / 2

Indice. Ordine di valutazione. Espressioni in C++ Le espressioni in C++ (CAP 4) Alberto Garfagnini e Marco Mazzocco A.A. 2014/ * 20 / 2 Le espressioni in C++ (CAP 4) Indice Le espressioni in C++ : precedenze e associatività degli operatori Alberto Garfagnini e Marco Mazzocco Università degli studi di Padova A.A. 2014/2015 gli operatori

Dettagli

Il linguaggio C funzioni e puntatori

Il linguaggio C funzioni e puntatori Salvatore Cuomo Il linguaggio C funzioni e puntatori Lezione n. 8 Parole chiave: Linguaggio C, procedure, funzioni. Corso di Laurea: Informatica Insegnamento: Programmazione II, modulo di Laboratorio Email

Dettagli

Inside C : Puntatori. Indirizzo: operatore & p = &v; x = a; Puntatori Referenziazione e Dereferenziazione Arrays

Inside C : Puntatori. Indirizzo: operatore & p = &v; x = a; Puntatori Referenziazione e Dereferenziazione Arrays Pointers: Puntatori (I) Le variabili finora incontrate sono caratterizzate da un nome (o identificativo), un tipo, ed occupano un area di memoria di dimensione dipendente dal tipo. Per accedere ad una

Dettagli

Laboratorio di Programmazione e Calcolo

Laboratorio di Programmazione e Calcolo UNIVERSITA DEGLI STUDI ROMA TRE DIPARTIMENTO DI FISICA E. AMALDI Laboratorio di Programmazione e Calcolo 6 crediti a cura di Severino Bussino Anno Accademico 2016-17 0) Struttura del Corso 1) Trattamento

Dettagli

Passaggio parametri puntatore

Passaggio parametri puntatore Passaggio parametri puntatore Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it

Dettagli

Ottenere una modifica del parametro attuale

Ottenere una modifica del parametro attuale Ottenere una modifica del parametro attuale Le variabili passate come parametri a una funzione, se alterate durante l esecuzione, non cambiano valore all uscita dalla funzione (parametri passati per valore)

Dettagli

Definizione di classi. Walter Didimo

Definizione 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

Dettagli

Programmazione Java Avanzata Programmazione Object- Oriented in Java

Programmazione Java Avanzata Programmazione Object- Oriented in Java Programmazione Java Avanzata Programmazione Object- Oriented in Java Ing. Gianluca Caminiti Testi di Riferimento (Java) Cay Horstmann Concetti di informatica e fondamenti di Java Apogeo, 2007 (Versione

Dettagli

Puntatori in C. Puntatori. Variabili tradizionali Esempio: int a = 5; Proprietà della variabile a: nome: a

Puntatori in C. Puntatori. Variabili tradizionali Esempio: int a = 5; Proprietà della variabile a: nome: a Puntatori in C Puntatori Variabili tradizionali indirizzo int a = 5; A00E... Proprietà della variabile a: nome: a A010 A012 5 tipo: int A014 valore: 5 indirizzo: A010 Finora abbiamo usato solo le prime

Dettagli

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++ Programmazione Procedurale in Linguaggio C++ Elementi di Base Parte 3 Istruzioni di Assegnazione versione 2.0 Questolavoroè concessoin uso secondoi termini di unalicenzacreative Commons (vedi ultima pagina)

Dettagli

Si possono applicare solo a variabili (di tipi interi, floating o puntatori), ma non a espressioni generiche (anche se di questi tipi).

Si possono applicare solo a variabili (di tipi interi, floating o puntatori), ma non a espressioni generiche (anche se di questi tipi). Operatori di incremento e decremento: ++ e -- ++ e -- sono operatori unari con la stessa priorità del meno unario e associatività da destra a sinistra. Si possono applicare solo a variabili (di tipi interi,

Dettagli

Università degli Studi di Cassino Corso di Fondamenti di Informatica Visibilità e tempo di vita delle variabili

Università degli Studi di Cassino Corso di Fondamenti di Informatica Visibilità e tempo di vita delle variabili Corso di Fondamenti di Informatica Visibilità e tempo di vita delle variabili Anno Accademico Francesco Tortorella Il concetto di visibilità Un programma C++ può assumere una struttura complessa grazie

Dettagli

Classi e oggetti Seconda parte. Oggetti dinamici

Classi e oggetti Seconda parte. Oggetti dinamici Università della Calabria Corso di Laurea in Ingegneria Elettronica Programmazione Orientata agli Oggetti A.A. 2006/2007 Classi e oggetti Seconda parte Paolo Trunfio * * DEIS, Università della Calabria

Dettagli

Espressioni e Operatori

Espressioni e Operatori Espressioni e Operatori Lezione 4 Espressioni Un espressione è formata da una o più operazioni Le operazioni sono rappresentate da operandi ed operatori operatore = simbolo che identifica l operazione

Dettagli

Programmazione a Oggetti Lezione 7. Il linguaggio Java: aspetti generali

Programmazione a Oggetti Lezione 7. Il linguaggio Java: aspetti generali Programmazione a Oggetti Lezione 7 Il linguaggio Java: aspetti generali Sommario Obiettivi di JAVA Portabilità: produrre codice eseguibile su più piattaforme (JVM) Affidabilità: Evitare il più possibile

Dettagli

costruttori e distruttori

costruttori e distruttori costruttori e distruttori Costruttore 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,

Dettagli

Indice. Introduzione PARTE PRIMA LE BASI DEL C++: IL LINGUAGGIO C 1

Indice. Introduzione PARTE PRIMA LE BASI DEL C++: IL LINGUAGGIO C 1 Indice Introduzione XV PARTE PRIMA LE BASI DEL C++: IL LINGUAGGIO C 1 Capitolo 1 Una panoramica sul linguaggio C 3 1.1 Le origini e la storia del linguaggio C 3 1.2 Il C è un linguaggio di medio livello

Dettagli

Laboratorio di Informatica

Laboratorio di Informatica Liste semplici (semplicemente linkate) Una lista semplice e costituita da nodi Laboratorio di Informatica 7. Strutture complesse di dati in C++ Ogni nodo e una struttura che contiene : Dati Un riferimento

Dettagli

#include <iostream> // libreria che gestisce flusso di input e output. using namespace std; // uso di librerie standard del C++

#include <iostream> // libreria che gestisce flusso di input e output. using namespace std; // uso di librerie standard del C++ Qualsiasi programma in C++ segue lo schema: #include // libreria che gestisce flusso di input e output using namespace std; // uso di librerie standard del C++ int main() { // dichiarazioni

Dettagli

INPUT: 2 parametri. double atan2( double y, double x) OUTPUT: risultato del calcolo. Le funzioni. Implementazioni di funzioni dell utente

INPUT: 2 parametri. double atan2( double y, double x) OUTPUT: risultato del calcolo. Le funzioni. Implementazioni di funzioni dell utente Le funzioni in C++ (CAP 6) Alberto Garfagnini e Marco Mazzocco Università degli studi di Padova A.A. 14/15 Le funzioni Sono i mattoni fondamentali per la costruzione dei programmi in C++ (e C) Il prototipo

Dettagli

Introduzione al C++ (continua)

Introduzione al C++ (continua) Introduzione al C++ (continua) I puntatori Un puntatore è una variabile che contiene un indirizzo di memoria pi_greco 3.141592 pi_greco_ptr indirizzo di 3.141592 & DEREFERENZIAZIONE RIFERIMENTO * se x

Dettagli

Vediamo come allocare dinamicamente un vettore di double: int dim; double *vect; cout << Dimmi la dimensione del vettore : ; cin >> dim;

Vediamo come allocare dinamicamente un vettore di double: int dim; double *vect; cout << Dimmi la dimensione del vettore : ; cin >> dim; Vediamo come allocare dinamicamente un vettore di double: int dim; double *vect; cout > dim; vect = new double[dim]; if (vect!= NULL) { int i; for (i=0; i

Dettagli

Corso di Programmazione ad Oggetti

Corso 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)

Dettagli

Precedenza e associatività. Complementi sul C - 2. Esempi. Esempi

Precedenza e associatività. Complementi sul C - 2. Esempi. Esempi Complementi sul C - 2 Ver. 2.4 2010 - Claudio Fornaro - Corso di programmazione in C Precedenza e associatività () [] ->. S D! ~ ++ + * & (cast ) sizeof S D * / % S D + - (somma e sottrazione) S D >

Dettagli

I numeri razionali. Specifica: la sintassi. Specifica: la semantica

I 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

Dettagli

Corso di Programmazione a oggetti

Corso 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

Dettagli

Gli array Array multidimensionali I puntatori L aritmetica dei puntatori Puntatori ed array I reference L attributo const a puntatori e reference

Gli array Array multidimensionali I puntatori L aritmetica dei puntatori Puntatori ed array I reference L attributo const a puntatori e reference Sintassi III Parte Indice Gli array Array multidimensionali I puntatori L aritmetica dei puntatori Puntatori ed array I reference L attributo const a puntatori e reference Array Per un tipo T t[size] è

Dettagli

Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN

Breve 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...

Dettagli

Puntatori. Unità 6. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Puntatori. Unità 6. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm

Dettagli

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++ Programmazione Procedurale in Linguaggio C++ Tipi Strutturati Concetti Avanzati versione 2.5 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina) G. Mecca

Dettagli

STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe

STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe String Una stringa Java rappresenta uno specifico valore e come

Dettagli

Sommario. Le differenze fra C e C++ Funzioni. Varie. Memoria. commenti. parametri per funzioni funzioni inline overloading di funzione

Sommario. Le differenze fra C e C++ Funzioni. Varie. Memoria. commenti. parametri per funzioni funzioni inline overloading di funzione Introduzione al C++ Sommario Le differenze fra C e C++ commenti Funzioni parametri per funzioni funzioni inline overloading di funzione Varie input/output nuovi header punto di dichiarazione delle variabili

Dettagli

Lezione 4. Costruttori

Lezione 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

Dettagli

METODI ESERCIZI. 07-xx_Esercizi[01] Versione del: venerdì 3 maggio Andrea Zoccheddu CORSO INFORMATICA ITI ANGIOY SASSARI

METODI ESERCIZI. 07-xx_Esercizi[01] Versione del: venerdì 3 maggio Andrea Zoccheddu CORSO INFORMATICA ITI ANGIOY SASSARI Versione del: venerdì 3 maggio 2013 07.XX METODI ESERCIZI Andrea Zoccheddu CORSO INFORMATICA ITI ANGIOY SASSARI Sintesi Esercizi sui metodi in Visual C#. Esercizio 1. scelta della firma Lo studente risponda

Dettagli

C# delegates. Vittorio Maniezzo Università di Bologna. Vittorio Maniezzo Università di Bologna 1. Delegate

C# delegates. Vittorio Maniezzo Università di Bologna. Vittorio Maniezzo Università di Bologna 1. Delegate C# delegates Vittorio Maniezzo Università di Bologna Vittorio Maniezzo Università di Bologna 1 Delegate I delegati possono essere visti come definizioni di tipi per puntatori a funzione. Permettono di

Dettagli

Parametri by reference. Funzioni. Passaggio dei parametri. Parametri by reference. Soluzione. Problemi

Parametri by reference. Funzioni. Passaggio dei parametri. Parametri by reference. Soluzione. Problemi Funzioni Introduzione Operatori & e * Passaggio by reference Passaggio di vettori Esercizio strcpy 2 Passaggio dei parametri Il linguaggio C prevede il passaggio di parametri by value Il chiamato non può

Dettagli

Le classi. Costruttori

Le classi. Costruttori Costruttori Le classi Usare una funzione per inizializzare membri di una classe viene considerato poco elegante. Ci si potrebbe dimenticare di invocare la funzione di inizializzaione o, peggio, chiamarla

Dettagli

Fondamenti di Programmazione Prof.ssa Elisa Tiezzi. Programmazione orientata a oggetti

Fondamenti 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

Dettagli

Introduzione alla programmazione in linguaggio C

Introduzione alla programmazione in linguaggio C Introduzione alla programmazione in linguaggio C Il primo programma in C commento Header della libreria Funzione principale Ogni istruzione in C va terminata con un ; Corso di Informatica AA. 2007-2008

Dettagli

Linguaggio C: PUNTATORI

Linguaggio C: PUNTATORI Linguaggio C: PUNTATORI I puntatori sono una delle più importanti caratteristiche del linguaggio C. Permettono di lavorare a basso livello, mantenendo flessibilità e praticità. Il C utilizza molto i puntatori

Dettagli

Corso di Laboratorio 2 Programmazione C++ Silvia Arcelli. 3 Novembre 2014

Corso di Laboratorio 2 Programmazione C++ Silvia Arcelli. 3 Novembre 2014 Corso di Laboratorio 2 Programmazione C++ Silvia Arcelli 3 Novembre 2014 1 Programmazione Generica Polimorfismo attraverso l ereditarietà: Attraverso le classi, esiste la possibilità di definire nuovi

Dettagli

Capitolo 7 I puntatori in C

Capitolo 7 I puntatori in C 1 Capitolo 7 I puntatori in C 7.2 Dichiarazione e inizializzazione di puntatori Variabili puntatore Contengono gli indirizzi di memoria come valore Le normali variabili contengono uno specifico valore

Dettagli

Linguaggio C: Espressioni

Linguaggio C: Espressioni Linguaggio C: Espressioni Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ 2 Ringraziamenti prof. Mirko Viroli, Università

Dettagli

Introduzione al C++ Corso di C++ INFN LNS 13 Dicembre Corrado Santoro

Introduzione al C++ Corso di C++ INFN LNS 13 Dicembre Corrado Santoro Introduzione al C++ Corso di C++ INFN LNS 13 Dicembre 2010 Corrado Santoro Concetto di Oggetto Proposto del 1966 nell'ambito dell'ai per rappresentare l' universo del discorso (ambiente di riferimento

Dettagli

Laboratorio di Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Strutture Dati Realizzazione di Liste 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 Bari

Dettagli

#include <iostream.h> #include <cassert> #define DEBUG. contenuto. struct Pila { int size; int defaultgrowthsize; int marker; int * contenuto; } ;

#include <iostream.h> #include <cassert> #define DEBUG. contenuto. struct Pila { int size; int defaultgrowthsize; int marker; int * contenuto; } ; #include #include #define DEBUG struct Pila { int defaultgrowthsize; ; size marker contenuto 16 5 12 2 Pila * crea(int initialsize) { //crea uno Pila cout

Dettagli

La Gestione della Memoria. Carla Binucci e Walter Didimo

La Gestione della Memoria. Carla Binucci e Walter Didimo La Gestione della Memoria Carla Binucci e Walter Didimo Esecuzione di programmi Java L esecuzione di un programma Java richiede: la compilazione del codice Java in bytecode Java (un linguaggio macchina

Dettagli

Le operazioni di allocazione e deallocazione sono a carico del sistema.

Le operazioni di allocazione e deallocazione sono a carico del sistema. Allocazione della memoria In C++ è possibile creare (allocare) variabili in maniera statica o dinamica. Nell allocazione statica una variabile esiste ed è utilizzabile dal momento della sua dichiarazione

Dettagli

Ricerca binaria (o dicotomica) di un elemento in un vettore

Ricerca binaria (o dicotomica) di un elemento in un vettore Ricerca binaria (o dicotomica) di un elemento in un La ricerca binaria o dicotomica è utilizzata per ricercare i dati in un ORDNATO. L algoritmo di ricerca binaria, dopo ogni confronto, scarta metà degli

Dettagli

Lezione 3 Tipi di Dato Derivati

Lezione 3 Tipi di Dato Derivati Lezione 3 Un tipo di dato derivato è ottenuto a partire da tipi di dato predefiniti attraverso gli operatori *, &, [] definendo enumerazioni definendo struct I tipi di dato derivati non sono tipi di dati

Dettagli

Fondamenti di C++ Input/Output di base

Fondamenti di C++ Input/Output di base Università della Calabria Corso di Laurea in Ingegneria Elettronica Programmazione Orientata agli Oggetti A.A. 2006/2007 Fondamenti di C++ Paolo Trunfio * * DEIS, Università della Calabria http://si.deis.unical.it/~trunfio

Dettagli

I puntatori sono variabili, il cui contenuto è un indirizzo di memoria (di variabili, di funzioni, etc).

I puntatori sono variabili, il cui contenuto è un indirizzo di memoria (di variabili, di funzioni, etc). I PUNTATORI I puntatori I puntatori sono variabili, il cui contenuto è un indirizzo di memoria (di variabili, di funzioni, etc). Una variabile fa riferimento diretto al suo contenuto, mentre un puntatore

Dettagli

Il C nel C++: Funzioni

Il C nel C++: Funzioni Il C nel C++: Funzioni Funzioni (1) il concetto -> spezzare il programma in parti (procedure) una funzione è un parte di programma dotata di un nome che può essere richiamata in altri punti del programma

Dettagli

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori Puntatori Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori 1 Il puntatore Un tipo puntatore è un tipo scalare per

Dettagli

Inizializzazione, Assegnamento e Distruzione di Classi

Inizializzazione, Assegnamento e Distruzione di Classi Inizializzazione, Assegnamento e Distruzione di Classi Lezione 9 Operazioni Automatiche In ogni programma C++ oggetti classe vengono gestiti automaticamente dal compilatore Inizializzati al momento della

Dettagli

Il linguaggio C. Puntatori e dintorni

Il linguaggio C. Puntatori e dintorni Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;

Dettagli