Luca Lista Elementi di C++ avanzato Luca Lista INFN, Sezione di Napoli.

Slides:



Advertisements
Presentazioni simili
Introduzione al linguaggio C++
Advertisements

1 La Standard Template Library vettori, liste, mappe, …. find, replace, reverse, sort, …. puntatori intelligenti La libreria standard STL e una libreria.
Puntatori in C e C++.
Java Stream e File.
Java Stream e File. La classe File Per operare con lintero file java mette a disposizione la classe File Per utilizzare la classe File è necessario importare.
Procedure e funzioni In linguaggio C.
Algoritmi e Programmazione
Differenze nei vari linguaggi di Elisa Trifirò e Barbara Tacchino
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
1 Strutture dati nel supporto a run time. 2 Entità presenti quando un programma va in esecuzione §programmi dutente (compilati) §routines del supporto.
Differenze tra C e C++ Commenti: Adesso puoi inserire dei commenti tra // e la fine della linea. Usare le librerie C: In C++ puoi anche chiamare una funzione.
Introduzione al linguaggio C
Introduzione al linguaggio C Dr. Francesco Fabozzi Corso di Informatica.
Fondamenti di Informatica Prof. Cantone
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Fondamenti di Informatica II Ingegneria Informatica (A-I) 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.
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
Introduzione al linguaggio C++ 5 lezioni
eliana minicozzi linguaggi1a.a lezione2
Funzioni di Libreria per le stringhe DICHIARAZIONI CONTENUTE NEL FILE: char *strcpy( char *dest, const char *sorg ); Copia sorg in dest, incluso il carattere.
1 Le gerarchie di tipi. 2 Supertipi e sottotipi 4 un supertipo –class –interface 4 può avere più sottotipi –un sottotipo extends il supertipo ( class.
nome: sequenza di caratteri usata per denotare un oggetto
memoria gestita staticamente:
1 laboratorio di calcolo II AA 2003/04 quinta settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
1 Ereditarietà Una classe può essere derivata da una classe esistente usando la sintassi: public, protected e private specificano il tipo di accesso ai.
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Struct, enum, Puntatori e Array dinamici
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
Dichiarazioni e tipi predefiniti nel linguaggio C
I File.
PUNTATORI Un puntatore è una variabile destinata a contenere lindirizzo di unaltra variabile Vincolo di tipo: un puntatore a T può contenere solo lindirizzo.
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.
Gerarchie Nella lezione precedente abbiamo imparato creare una gerarchia di oggetti usando i gruppi (edit>group)
CODIFICA Da flow-chart a C++.
Introduzione alla programmazione Object Oriented
Tipi di dati elementari
void binario(int n); …………………
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
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA FINALE DEL 21 MAGGIO 2007 NOME: COGNOME: ________________________________________________________________________________.
I nomi in Java F. Bombi 18 novembre novembre 2003.
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.
Oggetti in C# Lezione 2 Metodi e Static Oggetti in C# - Lezione 2.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
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.
Dato un vettore di reali di dimensione DIM, si inseriscano N elementi presi da tastiera, si utilizzi 0 per terminare l’inserimento. Ordinare gli elementi.
Variabili Numeriche –Interi (byte, short, int, long): complemento a 2 –A virgola mobile (float, double): IEEE 745 Alfanumeriche –Carattere (char): Unicode.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Parte 3 Lo stato: variabili, espressioni ed assegnazioni
Informatica Lezione 5 Scienze e tecniche psicologiche dello sviluppo e dell'educazione (laurea triennale) Anno accademico:
Calcolatori Elettronici Il Processore (2)
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.
1 Tipi di Dato §descrittori, tipi, controllo e inferenza dei tipi §specifica (semantica) e implementazione di tipi di dato l implementazioni “sequenziali”
ALLOCAZIONE STATICA: LIMITI Per quanto sappiamo finora, in C le variabili sono sempre dichiarate staticamente –la loro esistenza deve essere prevista e.
Il linguaggio C Puntatori e dintorni.
Programmazione in Java. Classi I programmi in Java consistono di classi. Le classi consentono di definire: collezioni di procedure (metodi statici) tipi.
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.
Copyright © Istituto Italiano Edizioni Atlas
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Strutture e Classi.
Stringhe Una stringa è un vettore di char con un carattere costante \0 che indica la fine della stringa il terminatore rende differenti gli array di char.
Puntatori in C Un puntatore è una variabile che contiene un indirizzo di memoria. Quando una variabile contiene l’indirizzo di un’altra variabile, si dice.
Transcript della presentazione:

Luca Lista Elementi di C++ avanzato Luca Lista INFN, Sezione di Napoli

Luca Lista Argomenti trattati: Conversione di tipi (Cast) Run-Time Type Information (RTTI) Namespace Gestione delle eccezioni Input/Output con gli Stream

Luca Lista Cast Il cast consente di cambiare il tipo di un oggetto E unoperazione molto rischiosa e da fare solo in casi veramente eccezionali Luso dei cast può in casi molto limitati essere indispensabile… –Esempio: per accedere direttamente a registri di una scheda di un sistema di acquisizione …ma tradizionalmente se ne fa abuso Rispetto al C, il C++ fornisce strumenti per effettuare il cast molto più sofisticati

Luca Lista Reinterpret e Static cast Un indirizzo qualsiasi di memoria può essere reinterpretato come puntatore a un oggetto di un tipo particolare IOdev * dev = reinterpret_cast ( 0xff00 ); Equivale al cast C: dev = (Iodev*)( 0xff00 ); Può essere usato in stile C per trasformare puntatori void* (Deprecato!). Qualche controllo in più a livello di compilatore viene fatta con static_cast, che offre maggiori sicurezze (conversione nella stessa gerarchia di classi). Attenzione! Estremamente rischioso!

Luca Lista Const cast Permette di violare laccesso costante ad un oggetto: Correntista tizio; const contoBancario& conto = banca.conto(tizio); contoBancario & c = const_cast (conto); c.preleva( ); Attenzione: anche qui se un oggetto è dichiarato const ce ne sarà un motivo. E anche possibile modificare lo stato di un oggetto in un metodo selettore (!!!)

Luca Lista Dynamic cast Se ho un albero di ereditarietà il dynamic cast consente di risalire a quale sottotipo appartenga un oggetto noto come tipo astratto Shape * s = something; Circle * c = dynamic_cast ( s ); if ( c != 0 ) r = c->radius(); Se loggetto non è del tipo richiesto, il dynamic cast restituisce 0 (zero)

Luca Lista RTTI Per conoscere ulteriori informazioni su un tipo particolare si può usare il Run-Time Type Information #include Shape * s = something; const type_info& rtti = typeid( *s ); cout << rtti.name() << endl; if (rtti == typeid(Circle) ) //...

Luca Lista Namespace E possibile separare i nomi di diverse classi in ambiti separati (esempio: due pacchetti che hanno concetti diversi per lo stesso nome, esempio: Punto ) namespace Geometry { class Punto { //... }; } #include Geometry/Punto.h using namespace Geometry; void main() { Punto p1, p2; } Geometry/Punto.h

Luca Lista Gestione delle eccezioni (1) E anche possibile causare uninterruzione dovuta ad errore if ( denominator == 0 ) throw DivideByZero; if ( inputLine.invalid() ) throw SyntaxError(invalid command); Dove in precedenza abbiamo definito gli handler come: class DivideByZero {}; class SyntaxError { public: SyntaxError( const char* c ) : c_( c ); const string& error() const { return c_; } private: string c_; };

Luca Lista Gestione delle eccezioni (2) Lerrore può essere gestito dal programma in modo che non venga interrotta lesecuzione: try { myCode(); } catch( DivideByZero ) { cerr << Attento: hai tentato << una divisione per zero! << endl; } catch( SyntaxError s ) { cerr << Errore di sintassi: s.error() << endl; } catch(... ) { cerr << Errore sconosciuto << endl; }

Luca Lista Gestione dellI/O: gli stream Diversi stream ( cout, cin, cerr, etc.) hanno uninterfaccia comune che permette la definizione di molte operazioni in comune per diversi stream Già abbiamo visto gli operatori: ostream& << (ostream&, const T&); istream& >> (istream&, const T&); Che permettono di scrivere: T x, y; cout << x; cin >> y;

Luca Lista Altri modi di usare lI/O (1) Esistono altri modi per accedere agli stream: Leggere un carattere alla volta: char c;char c1, c2; cin.get(c)cin.get(c1).get(c2); Scrivere un carattere alla volta: char c;char c1, c2; cout.put(c);cout.put(c1).put(c2) << endl;

Luca Lista Altri modi di usare lI/O (2) Leggere un buffer: char c[256]; cin.get( c, 256, '\n ); // \n = terminatore –Il terminatore si può anche omettere se è '\n' –il terminatore viene lasciato come prossimo carattere da leggere cin.getline( c, 256 ); // '\n' sottinteso –il terminatore viene rimosso, così la prossima operazione non fallisce Ignorare una parte dello stream cin.ignore( 256 ); –Di default cin.ignore() rimuove un solo carattere.

Luca Lista Formato delloutput #include void main() { // hexadecimal : 0x1000 cout.setf(ios::hex, ios::basefield); cout.setf(ios::showbase); cout << 4096 << endl; // octal: cout.setf(ios::oct, ios::basefield); cout.setf(ios::showbase); cout << 4096 << endl; // floating point######## cout.setf(ios::fixed, ios::floatfield); cout << setw(20) << setfill('#') << setprecision(10) << << endl; // scientific exponential#### e+00 cout.setf(ios::scientific, ios::floatfield); cout << setw(20) << setfill('#') << setprecision(10) << << endl; // reset to default cout.setf(ios::fmtflags(0), ios::floatfield); cout << <<endl; }

Luca Lista Stati di uno stream Alcune funzioni permettono di investigare lo stato di uno stream: bool good() const; // OK prossimo I/O bool bad() const; // stream corrotto bool eof() const; // visto End Of File bool fail() const; // KO prossimo I/O operator void*() const; // !fail() operator !() const; // fail() Esempi: while( ! cin.eof() ) { cin >> c; } char c; while( cin >> c ) cout << c;

Luca Lista Input e Output su file #include int main() { char* filename = "test-out.txt"; ofstream fout ( filename ); if ( ! fout ) { cerr << " can't open input - " << filename << endl; return 1; } fout << << endl; fout.close() fout.close(); ifstream fin ( filename ); if ( ! fin ) { cerr << " can't open output - " << filename << endl; return 1; } double pi; fin >> pi; fin.close) fin.close(); cout << " pi = " << pi << endl; return 0; }

Luca Lista Input e Output su stringhe #include int main() { ostringstream sout; sout.setf(ios::fixed); sout << setprecision(6) << << endl; sout.str() string s = sout.str(); cout << s; istringstream sin( s ); double pi; sin >> pi; cout << pi << endl; }