Esercitazioni di C++ 31 dicembre 2018 Claudio Rocchini IGMI.

Slides:



Advertisements
Presentazioni simili
Introduzione al linguaggio C++
Advertisements

Funzioni In C++ le funzioni sono caratterizzate da un nome, dal tipo della variabile ritornata e da una lista di parametri (opzionali) La lista dei parametri.
Differenze nei vari linguaggi di Elisa Trifirò e Barbara Tacchino
Introduzione al linguaggio C
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Assegnamento di valore a una variabile Anno Accademico 2009/2010.
Soluzione Esercizio - Classe Vettore
CAPITOLO 4 LINGUAGGIO JAVA: COSTRUTTI DI BASE. ALFABETO Java adotta la codifica standard Unicode della società Unicode, Inc. (ftp://ftp.unicode.org) definito.
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.
Programmazione in Java Claudia Raibulet
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.
Oggetti in C# Lezione 2 Metodi e Static Oggetti in C# - Lezione 2.
1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast.
Lezione 2 : Basi del linguaggio Variabili. Come visto nella lezione 1 le classi registrano il proprio stato nelle variabili  int cadenza = 0;  int velocita.
1 Elementi DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Linguaggio C A.A. 2011/2012
Fondamenti di Informatica A - Massimo Bertozzi LE FUNZIONI.
1 ELEMENTI DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Linguaggio C A.A. 2011/2012
Programmazione in Java Parte I: Fondamenti Lezione 1 Dott. Marco Faella.
Un semplice programma C /* Programma che stampa un saluto */ #include main() { printf(“Hello World!\n”); }
La codifica di Huffman Un'implementazione in C++ (parte del materiale è opera di Mark Nelson, Dr. Dobb’s Journal, Gennaio 1996)‏
Ereditarietà Uno dei principi della programmazione orientata agli oggetti (OOP) è il riuso Le classi dovrebbero essere progettate come componenti riutilizzabili.
Java World Introduzione.
Java: concetti e costrutti base
Introduzione al linguaggio C
Gli array Moreno Marzolla
Strutture classi e oggetti
Programmazione a oggetti
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Unità didattica 1: Introduzione al linguaggio Java
Process synchronization
TIPI PRIMITIVI TIPI STRUTTURATI
JAVA usa una rappresentazione in VIRGOLA MOBILE
Corso Java Introduzione.
Vettori dinamici Definiremo la classe vector.
Corso Java Esercitazione.
FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a. a
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Programmazione e Laboratorio di Programmazione
Oggetti Java.
Copia di oggetti il costruttore di copia ha le stesse particolarità della signature di un costruttore ordinario; il primo parametro è una reference ad.
Algebra Booleana.
© 2007 SEI-Società Editrice Internazionale, Apogeo
Programmazione e Laboratorio di Programmazione
APPUNTI SUL LINGUAGGIO C
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Process synchronization
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Le stringhe in C++ Laboratorio 26 Aprile Dott. Serena Villata
Lucidi della Pof.ssa Pazienza
comprensione e modifica di codice
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
APPUNTI SUL LINGUAGGIO C
Le variabili Tipo Valori ammissibili
concetti ed applicazioni
Java Introduzione.
Array Un array è un contenitore “contiene” al massimo un numero predefinito di oggetti dello stesso tipo. Ogni oggetto dell'array è detto “elemento” Ad.
Programmazione e Laboratorio di Programmazione
Passaggio di parametri per indirizzo
PowerShell di Windows PowerShell è un shell che mette a disposizione un prompt interattivo e un interprete a riga di comando , per le sue caratteristiche.
La programmazione strutturata
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Ese 3 (del 3 Aprile 2003).
Programmazione Procedurale
Corso di programmazione, Simulazione, ROOT, code, ecc. ecc.
Transcript della presentazione:

Esercitazioni di C++ 31 dicembre 2018 Claudio Rocchini IGMI

Una semplice classe Definiremo la classe Point2: La classe rappresenta i punti del piano. Si definiscono alcuni operatori di base. Si parametrizza la classe secondo il tipo scalare di riferimento (template). Si accenna ad altre possibili implementazioni. 31 dicembre 2018 Claudio Rocchini IGMI

Point2: introduzione class Point2 // Intestazione { private: // Dati privati double v[2]; // Dati della classe public: // Membri pubblici //… membri … }; // Notare il ‘;’ Una classe e’ composta da dati e funzioni, sia i dati che le funzioni possono essere privati o pubblici, vale a dire visibili dall’utilizzatore della classe. 31 dicembre 2018 Claudio Rocchini IGMI

Point2: Costruttori inline Point2() // Costruttore di default { } inline Point2( double v0, double v1 ) v[0] = v0; // Costruttore con v[1] = v1; // Inizializzazione I costruttori sono funzioni che vengono chiamate automaticamente al tempo di creazione di un oggetto; possono avere o non avere parametri. 31 dicembre 2018 Claudio Rocchini IGMI

Point2: assegnamento inline Point2 & operator= ( const Point2 & p ) { v[0] = p.v[0]; v[1] = p.v[1]; return *this; } Note: la stringa ‘operator=‘ è il nome della funzione. Il tipo del parametro è obbligatorio, come il valore di ritorno che permette di concatenare le espressioni: a = b = 3; 31 dicembre 2018 Claudio Rocchini IGMI

Point2: operatore somma inline Point2 operator+ (const Point2 & p) const { return Point2( v[0]+p.v[0], v[1]+p.v[1] ); } Note: il primo operando dell’operatore somma è l’oggetto in questione (this). L’operatore è const (non modifica l’oggetto). Si utilizza il costruttore con parametri per costruire “al volo” il valore di ritorno. Il parametro p è passato per riferimento per motivi di efficienza. 31 dicembre 2018 Claudio Rocchini IGMI

Point2: visualizzazione inline void show() const { cout << '[' << v[0] << ',' << v[1] <<"]\n"; } Metodo per la visualizzazione della classe; l’oggetto è visualizzato nella forma: [v0,v1]. 31 dicembre 2018 Claudio Rocchini IGMI

Point2: esempio utilizzo Class Point2 … // Definizione classe int main() { Point2 a(2,4); // Costr. con iniziliz. Point2 b(3,2); Point2 c; // Costruttore default c = a+b; // Somma ed assegnamento c.show(); // Visualizzazione return 0; } 31 dicembre 2018 Claudio Rocchini IGMI

Point2: parametro template template <class scalar> class Point2 { private: scalar v[2]; // Dati public: … }; Si parametrizza la classe secondo il tipo scalare, l’implementazione rimane (quasi) invariata. 31 dicembre 2018 Claudio Rocchini IGMI

Point2: utilizzo del template … Point2<float> p( 3.4 , 2.7 ); Point2<int> q( 3,2 ); Point2<complex> z; Specificando il parametro template di possono dichiarare punti formati da float, interi etc. 31 dicembre 2018 Claudio Rocchini IGMI

Point2: confronti inline bool operator== ( const Point2 & p ) const { return v[0]==p.v[0] && v[1]==p.v[1]; } inline bool operator!= ( const Point2 & p ) const return v[0]!=p.v[0] || v[1]!=p.v[1]; L’operatore di confronto è una funzione booleana (costante). 31 dicembre 2018 Claudio Rocchini IGMI

Point2: componenti (1/3) inline scalar& operator[] (const int i) { return v[i]; } inline const scalar& operator[] (const int i) const L’operatore [] permette di accedere alle componenti. La versione costante viene utilizzata in lettura. 31 dicembre 2018 Claudio Rocchini IGMI

Point2: componenti (2/3) Point2<double> a(1,2); Point2<double> b(5,7); double x; a[0] = 9; // Accesso con operatore [] x = (a+b)[1]; // Accesso con op. costante Il compilatore utilizza l’operatore [] standard o costante a seconda dei casi: il risultato della somma fra a e b e’ costante e non potrebbe essere acceduto dall’operatore [] standard. 31 dicembre 2018 Claudio Rocchini IGMI

Point2: componenti (3/3) inline scalar& operator[] (const int i) { assert(i>=0 && i<2); // Controllo in debug return v[i]; } inline const scalar& operator[] (const int i) const { // Controllo esplicito if(i<0 || i>=2) return v[0]; else return v[i]; 31 dicembre 2018 Claudio Rocchini IGMI

Point2: derivazione class CPoint : public Point2<double> { Color c; inline CPoint() {} inline CPoint( double x, double y, Color nc ) : Point2<double>(x,y) c = nc; } }; Derivazione della sottoclasse punto colorato. 31 dicembre 2018 Claudio Rocchini IGMI

Un’altra implementazione L’implementazione finora vista non e’ la migliore. Esiste un’altra tecnica, piu’ efficiente, che fa utilizzo della creazione dinamica di tipi per la valutazione statica delle espressioni. J. Blinn, Optimizing C++ Vector Expressions, IEEE Computer Graphics and Applications, July-August 2000, pg. 97-103. 31 dicembre 2018 Claudio Rocchini IGMI

Esercizi su Point2 Scrivere l’operatore sottrazione: a = b-c; Scrivere il prodotto scalare: a = b*c; Scrivere l’operatore meno unario: a = -b; Scrivere il prodotto per scalare a destra, esempio: a = b*3.0; Scrivere il prodotto per scalare a sinistra, esempio: a = 3.0*b; (*) (*) Esercizio impegnativo 31 dicembre 2018 Claudio Rocchini IGMI