Corso di programmazione, Simulazione, ROOT, code, ecc. ecc.

Slides:



Advertisements
Presentazioni simili
Puntatori Linguaggio C.
Advertisements

1 La Standard Template Library vettori, liste, mappe, …. find, replace, reverse, sort, …. puntatori intelligenti La libreria standard STL e una libreria.
Si consideri il seguente programma: class Up extends Object { public static int x; public int y; public static void metodo(Up o) {Up w=o.metodo1(x); o.y=w.y+6;}
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 Dr. Francesco Fabozzi Corso di Informatica.
Introduzione alla Object Oriented Programming, OOP E.Mumolo. DEEI
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
E.Mumolo. DEEI Introduzione alla programmazione ad oggetti in C++ Object Oriented Programming, OOP E.Mumolo. DEEI
Costruzione di Interfacce Lezione 12 C++STL
Introduzione al linguaggio C++ 5 lezioni
Lab. Calc. AA 2005/061 Classi. Lab. Calc. AA 2005/062 C e C++ Fino a questo punto abbiamo introdotto gli elementi base di qualsiasi linguaggio di programmazione,
Lab. Calc. 2005/06 Ereditarietà. Lab. Calc. 2005/06 Scopo di questa lezione: Imparare a creare nuove classi ereditando da classi già esistenti. Capire.
1 laboratorio di calcolo II AA 2003/04 quarta 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.
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.
void binario(int n); …………………
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Pile e Code.
CORSO DI PROGRAMMAZIONE II
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Strutture Dati.
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 RAPPRESENTAZIONI CONCATENATE.
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.
ODMG.
Maurizio Cozzetto, Francesco Sarasini
Introduzione al linguaggio C
Esercizi.
Struct, enum, Puntatori e Array dinamici
Il linguaggio C Strutture Moreno Marzolla
C/C++.
Strutture classi e oggetti
Programmazione a oggetti
TIPI PRIMITIVI TIPI STRUTTURATI
Programmazione ad Oggetti per la Fisica
Corso Java Introduzione.
Vettori dinamici Definiremo la classe vector.
OBJECT ORIENTED DATABASE
Corso Java Cicli e Array.
Esercitazioni di C++ 31 dicembre 2018 Claudio Rocchini IGMI.
Programmazione e Laboratorio di Programmazione
Copia di oggetti il costruttore di copia ha le stesse particolarità della signature di un costruttore ordinario; il primo parametro è una reference ad.
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Alberi n-ary Lezioni di C.
APPUNTI SUL LINGUAGGIO C
APPUNTI SUL LINGUAGGIO C
APPUNTI SUL LINGUAGGIO C Allocazione dinamica della memoria
APPUNTI SUL LINGUAGGIO C Simulazione Prima Prova Intermedia
APPUNTI SUL LINGUAGGIO C
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Java Introduzione.
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Passaggio di parametri per indirizzo
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Ese 1 (del 31 Marzo 2004).
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Corso di programmazione, Simulazione, ROOT, code, ecc. ecc.
Transcript della presentazione:

Corso di programmazione, Simulazione, ROOT, code, ecc. ecc. Per il Servizio Elettronica e Rivelatori INFN Sezione di Napoli Luca Lista, UniNa & INFN

Programmazione ad oggetti in C++

Classi in c++ Le classi sono una significativa evoluzione delle struct C, ed aggiungono funzioni oltre alle variabili Oltre ad aumentare le funzionalità, rappresentano un cambio di paradigma La programmazione si può focalizzare sul comportamento di classi di oggetti e delle loro relazioni anziché sull'algoritmo e sulla struttura dei dati Oltre alla semplice estensione delle struct C, le classi offrono molte ulteriori possibilità

Classe Histogram: dichiarazione Histogram.h #ifndef HISTOGRAM_H #define HISTOGRAM_H class Histogram { public: Histogram(int bins, double xmin, double xmax); //costruttore ~Histogram(); //distruttore void fill(double x); //metodo void print() const; //metodo (accesso costante) private: int _bins; double _xmin, _xmax; double * _entries; }; #endif Interfaccia pubblica attributi privati

Class Histogram: uso Histogram_main.cpp #include <cstdlib> #include "Histogram.h" int main() { Histogram h(10, 0, 1); for(int i = 0; i < 100; i++) { h.fill(drand48()); } h.print(); }

Class Histogram: Implementazione Histogram.cc #include "Histogram.h" #include <iostream> #include <iomanip> #include <cmath> Histogram::Histogram(int bins, double xmin, double xmax) : _bins(bins), _xmin(xmin), _xmax(xmax) { _entries = new double[bins]; for(int i = 0; i < bins; ++i) _entries[i] = 0; } Histogram::~Histogram() { delete [] _entries; } void Histogram::fill(double x) { int bin = (x - _xmin)/(_xmax - _xmin) * _bins; if(bin < 0 || bin >= _bins) return; _entries[bin]++; } void Histogram::print() const { double dx = (_xmax - _xmin)/_bins; for(int i = 0; i < _bins; i++) { double x1 = i * dx; double x2 = x1 + dx; std::cout << "[" << std::fixed << std::setw(5) << std::setprecision(4) << x1 << ", " << std::setw(5) << std::setprecision(4) << x2 << "] "; for(int j = 0; j < _entries[i]; j++) std::cout << "="; std::cout << " (" << std::setw(5) << std::setprecision(4) << _entries[i] << ")\n"; } }

Ereditarietà come estensione Persona.h Utente.h class Persona { public: void print() const; private: string _nome, _cognome; date: _nascita; }; #include "Persona.h" class Utente : public Persona { public: void login(const string & passwd) const; private: string _userName; string _encriptedPasswd; }; Una sottoclasse eredita tutti i metodi e gli attributi dalla classe principale public specifica che tutti i metodi pubblici della classe di base restano pubblici anche nella sottoclasse

funzioni virtuali Shape.h Rectangle.h class Shape { // . . . virtual void Draw() = 0; // . . . }; class Rectangle : public Shape { Rectangle(double x1, double y1, double x2, double y2); virtual void Draw(); }; Le funzioni definite virtual corrispondono ad una tabella di puntatori in memoria per ogni oggetto (virtual table) La possibilità di chiamare la funzione giusta a run time ha una (piccola) penalità di velocità dovuta all'indirezione tramite puntatore

Ereditarietà e polimorfismo

Ereditarietà e polimorfismo Soldato

Templates template<typename T> struct Node { T val; struct node * next; }; template<typename T> class List { void push(const T& t); T & front(); T & back(); pop_front(); pop_back(); private: struct Node<T> * _front; };

Standard Template Library La STL è una libreria di contenitori di oggetti Il tipo di oggetti che può essere contenuto è generico, grazie all'implementazione che usa i templates L'interfaccia dei vari contenitori è standardizzata Lo scorrimento attraverso i contenitori è implementato attraverso classi ausiliarie dette iteratori Contiene diverse utility di manipolazione (es.: ordinamento)

StD::vector #include <vector> #include <iostream> int main() { std::vector<int> v; for(int i = 0; i < 10; i++) v.push_back(i); std::cout << v.size() << std::endl; for(int i = 0; i < v.size(); ++i) std::cout << v[i] << std::endl; for(std::vector<int>::const_iterator i = v.begin(); i != v.end(); i++) std::cout << *i << std::endl; }

Std::sort #include <algorithm> // . . . bool reverse_sort(double x, double y) { return x > y; } int main() { // . . . std::sort(v.begin(), v.end()); for(std::vector<double>::const_iterator i = v.begin(); i != v.end(); i++) std::cout << *i << std::endl; std::cout << "------" << std::endl; std::sort(v.begin(), v.end(), reverse_sort); for(std::vector<double>::const_iterator i = v.begin(); i != v.end(); i++) std::cout << *i << std::endl; }

Stringhe in C++ #include <string> int main() { std::string str1; str1 = "Ciao"; int s = s1.length(); std::cout << str1 << std::endl; std::string str2 = str1 + " ciao"; int f = 0; if(str2 != "Ciao") f = str2.find(str1); const char * c = str1.c_str(); }

Auto std::vector<int> v {12, 13, 14}; std::vector<int>::iterator iter_std = v.begin(); auto iter = v.begin(); Semplifica l'uso di tipi molto lunghi da scrivere Il tipo è determinato dal lato a destra del segno = nell'assegnazione

STL Riferimenti Tutorial: https://www.topcoder.com/community/competitive- programming/tutorials/power-up-c-with-the-standard-template- library-part-1/ https://www.topcoder.com/community/competitive- programming/tutorials/power-up-c-with-the-standard-template- library-part-2/ Overview: https://www.geeksforgeeks.org/the-c-standard-template- library-stl/ Contenitori: http://www.cplusplus.com/reference/stl/