Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.

Slides:



Advertisements
Presentazioni simili
Puntatori Linguaggio C.
Advertisements

Puntatori in C e C++.
Oggetti Java.
Costruttori e Distruttori
Università di camerino
Differenze nei vari linguaggi di Elisa Trifirò e Barbara Tacchino
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Fondamenti di Informatica
UD 3: “Le Liste” UD 4: “Pile e Code” UD 5: “Alberi e grafi”
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
Introduzione al linguaggio C++ 5 lezioni
1 Lezione XIII Lu 17-Nov-2005 Programmare le classi.
Soluzione Esercizio - Classe Vettore
Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 6 1 Programmi concorrenti: quanto è lungo un millisecondo? In un normale personal computer.
Oggetti e dati primitivi
Approfondimento delle classi
1 laboratorio di calcolo II AA 2003/04 sesta settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
Operatori E possibile ridefinire +, -, *, [], ++, ==, < class Vector2D { Friend operator+(const Vector2D& v1, const Vector2D& v2); public: Vector2D(double.
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Lezione IX Laboratorio di Programmazione. Le Classi Una classe C++ è definita come segue: class Nomeclasse { private: // metodi e attrib. visibili solo.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Università degli Studi di BresciaA.A. 2012/2013 Fondamenti di Programmazione Docente: Alessandro SaettiA.A. 2012/2013 Università degli Studi di Brescia.
CdL Ingegneria Elettronica, Telecomunicazioni ed Automazione Fondamenti di Informatica LB A.A /02/2008 Alessandra Toninelli
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Unità Didattica 3 Linguaggio C
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
Fondamenti di Programmazione Prof.ssa Elisa Tiezzi
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA FINALE DEL 21 MAGGIO 2007 NOME: COGNOME: ________________________________________________________________________________.
Matrici: un’implementazione parametrica in C++
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Approfondimenti sulle Classi.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Ereditarietà.
Oggetti in C# Lezione 1 Classi ed istanze Oggetti in C# - Lezione 1.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
CORSO DI PROGRAMMAZIONE II Lezione 22
Definizione di classi Capitolo 18 febbraio 2004 Definizione di classi.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Ottobre 2014.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Alberi.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Marzo 2014.
Cose nuove di Java (prima a chiacchiera, poi formalmente)
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Strutture e Classi.
1 Java secondo contatto Nel tunnel una luce…. 2 Esercizio - Contatore Definire la classe Contatore con le seguenti caratteristiche:  Il metodo getValore.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 5: 14 Aprile 2014 Marco D. Santambrogio – Gianluca Durelli –
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Introduzione alle Classi e agli Oggetti in Java 1.
Linguaggio C: Funzioni e Puntatori Laboratorio di Programmazione Gruppo 1.
Transcript della presentazione:

Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria Informatica, Gestionale e dellAutomazione

Lezione 5 Sovraccarico degli operatori

Il meccanismo del sovraccarico delle funzioni vale anche per gli operatori predefiniti Gli operatori non sono altro che funzioni in forma infissa a *= 5 equivale a a.operator*=(5) Il sovraccarico consente di ridefinire il comportamento degli operatori predefiniti Non è possibile creare nuovi operatori

Operatori ridefinibili È possibile ridefinire gli operatori + - * / % ^ & | ~ ! = += -= *= /= %= ^= &= |= > >>= = && || >*, -> [] () new new[] delete delete[] Non è possibile ridefinire gli operatori ::..* ?: sizeof typeid

Definire un operatore Affinché un operatore possa operare sui membri di una classe deve essere ridefinito Fanno eccezione Operatore di indirizzo & Restituisce lindirizzo delloggetto Operatore di assegnamento = Esegue una copia membro a membro Entrambi possono comunque essere ridefiniti Non è possibile ridefinire operatori che operano sui tipi predefiniti Non è possibile cambiare larità o lassociatività di un operatore

Associatività degli operatori Per tutti gli operatori lassociatività è da sinistra a destra Tranne = per cui lassociatività è da destra a sinistra z+y+z viene valutata come (x+y)+z x=y=z viene valutata come x=(y=z)

Assegnamento membro a membro Lassegnamento di un oggetto ad un altro oggetto viene gestito di default come una copia membro a membro unOggetto = unAltroOggetto; Non viene utilizzato il costruttore per copia ma un operatore implicito di assegnamento Ad ogni membro non statico di unOggetto viene assegnato il corrispondente valore del membro di unAltroOggetto Dopo la copia, i due oggetti hanno gli stessi dati, ma rimangono due oggetti distinti

Definizione di un operatore Il sovraccarico di un operatore si esegue definendo una funzione il cui nome è operator class Complex { double re, im; public: Complex& operator+(Complex c) { re += c.re; im += c.im; return *this; } };

Sovraccarico di un operatore unario Un operatore unario può essere definito come funzione membro (senza argomenti) o funzione non membro (con un argomento) Largomento è un oggetto della classe o un suo riferimento È necessario che sia un riferimento quando si deve modificare loggetto Complex& Complex::operator-() { re = -re; im = -im; return *this; }

Sovraccarico di un operatore binario Un operatore binario può essere definito come funzione membro (con un argomento) o funzione non membro (con due argomenti) Gli argomenti sono oggetti della classe o loro riferimenti È necessario che sia un riferimento quando si deve modificare loggetto Quando loperatore viene definito tramite una funzione membro, loggetto alla sinistra delloperatore invoca loperatore e quello sulla destra viene passato come argomento Complex& Complex::operator-(Complex& c) { re -= c.re; im -= c.im; return *this; }

Valore di ritorno di un operatore Un operatore può restituire una copia delloggetto risultato o un riferimento Complex& Complex::operator-(Complex& c) { re -= c.re; im -= c.im; return *this; } Complex Complex::operator-(Complex& c) { re -= c.re; im -= c.im; return *this; }

Operatori friend Un operatore che ha bisogno di accedere ai dati privati di un oggetto può essere definito come friend invece che come membro Le funzioni friend non hanno un puntatore this, per cui bisogna passare esplicitamente entrambi i parametri Gli operatori friend sono utili in quei casi in cui loperazione riguarda oggetti di tipi diversi Es. * vettore-matrice, - magazzino-ordine

Sovraccarico di > Gli operatori > (inserimento ed estrazione da uno stream) vanno ridefiniti tramite operatori friend per poterli usare su oggetti definiti dallutente class Complex { // … friend std::ostream& operator<<(std::ostream&, const Complex); friend std::istream& operator>>(std::istream&, Complex&); }; std::ostream& operator<<(std::ostream& o, const Complex c) { return o << "(" << c.re << ", " << c.im << ")"; } std::istream& operator>>(std::istream& i, Complex& c) { i >> c.re >> c.im; return i; }

Operatori new e delete new e delete sono degli operatori, ed in quanto tali possono essere ridefiniti void* operator new(size_t size) { // Esegue l'allocazione. // Restituisce un puntatore alla memoria allocata, oppure 0 } void operator delete(void* p) { // rilascia la memoria } Quando viene chiamato new, viene automaticamente chiamato il costruttore appropriato Quando viene chiamato delete, viene automaticamente chiamato il distruttore

new e delete su array void* operator new[](size_t size) { // Esegue l'allocazione. // Restituisce un puntatore alla memoria allocata, oppure 0 } void operator delete[](void* p) { // Rilascia la memoria. // Il distruttore di ogni elemento viene chiamato automaticamente }

Operatore [] Esistono due versioni delloperatore [] const e non const Passare ad una funzione un array const e poi utilizzare loperatore per accedere al contenuto modificandolo sarebbe un problema Il compilatore non consente luso di funzioni membro non const con oggetti const