Generalizzazione di funzioni e di classi. Macro come funzioni generiche



Documenti analoghi
Inizializzazione, Assegnamento e Distruzione di Classi

Visibilità dei Membri di una Classe

void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }

costruttori e distruttori

Concetto di Funzione e Procedura METODI in Java

Introduzione alla programmazione in C

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 18 31/03/2014

Funzioni in C. Violetta Lonati

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.

Eredità in C++ Corso di Linguaggi di Programmazione ad Oggetti 1. a cura di Giancarlo Cherchi

Corso di Fondamenti di Informatica

Università degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella

Grammatica di base: Pointers

puntatori Lab. Calc. AA 2007/08 1

Laboratorio di programmazione

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Esercitazione n 4. Obiettivi

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Allocazione dinamica della memoria - riepilogo


Modulo 4: Ereditarietà, interfacce e clonazione

Corso di Programmazione ad Oggetti

Fondamenti di Informatica e Laboratorio T-AB Ingengeria dell Automazione a.a. 2008/2009. Lab 02 Tipi semplici in C

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main

I puntatori e l allocazione dinamica di memoria

Variabili e tipi di dato

Le variabili. Olga Scotti

Codifica: dal diagramma a blocchi al linguaggio C++

esercizi Esercizi / problemi

Struttura di un programma Java

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Const, friend, static,this

Corso di Informatica

Programmazione in Java Parte I: Fondamenti

Programmazione a Oggetti Lezione 10. Ereditarieta

Funzioni. Il modello console. Interfaccia in modalità console

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Oggetti Lezione 3. aspetti generali e definizione di classi I

Indirizzo di una funzione. Puntatori a funzioni. Definizione di variabili. Definizione di variabili

Linguaggio C - Funzioni

FUNZIONI. La libreria standard del C fornisce una ricca collezione di funzioni, come le funzioni:

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

Introduzione al Linguaggio C

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

Corso Programmazione 1 Capitolo 01: Concetti Elementari

Introduzione al linguaggio C Gli array

15 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Esercizio: gestione di un conto corrente

Dispensa YACC: generalità

Relazioni tra oggetti e classi : Composizione. Relazioni tra oggetti e classi : esempio di Aggregazione. classe contenitore

Il comando Make: : uno strumento per la compilazione ed esecuzione di software applicativo. A. Murli - Cacolo Scientifico a.a.

10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress.

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete

14 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Parola chiave extends

Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

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

Esercitazione N7:Gioco dei 21 fiammiferi (impariamo java giocando)

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Linguaggio C. Fondamenti. Struttura di un programma.

Dynamic Linking. Introduzione Creazione di una libreria dinamica Uso di una libreria dinamica

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

Corso di Informatica

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Obiettivi dell esercitazione. Requisiti (cont.) Requisiti. Università di Roma La Sapienza A.A Facoltà di Ingegneria Sede di Latina

CREARE UNA LIBRERIA IN C

Introduzione a Classi e Oggetti

Office 2007 Lezione 09. Contenuto riutilizzabile

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

Gestione Iter Manuale Sistemista. Gestione Iter Manuale Sistemista

Progettazione : Design Pattern Creazionali

Linguaggio C - Stringhe

Sottoprogrammi: astrazione procedurale

Introduzione ai tipi di dato astratti: applicazione alle liste

Tipi di dato-prima parte

Programmazione in Java (I modulo) Lezione 3: Prime nozioni

CORSO ACCESS PARTE II. Esistono diversi tipi di aiuto forniti con Access, generalmente accessibili tramite la barra dei menu (?)

Insegnamento di Informatica CdS Scienze Giuridiche A.A. 2006/7. Il trattamento dei dati

Object Oriented Software Design

Lezione 10: Librerie e compilazione separata

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

!"#$%&&'()#*%+%+!"#$"',,'()#*%+ -")%*&'&'+'$.)+-$$%&&) !"#$%&&'(%)'*+%",#-%"#.'%&'#/0)-+#12"+3,)4+56#7+#.')8'9

Metodologie di programmazione in Fortran 90

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO V Indice

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI

Object Oriented Programming

Tale attività non è descritta in questa dispensa

OSSIF WEB. Manuale query builder

Programmazione a Oggetti Modulo B

Sistema operativo: Gestione della memoria

Come archiviare i dati per le scienze sociali

risulta (x) = 1 se x < 0.

Introduzione. Java. Composizione. Esempio -- composizione. G. Prencipe È qualcosa che abbiamo già visto varie volte

Organizzazione degli archivi

Gestione dei File in C

Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

Linguaggi e Paradigmi di Programmazione

Transcript:

Alessio Bechini - Corso di - Generalizzazione di funzioni e di classi Il meccanismo di template Macro come funzioni generiche long longmax(long x, long y) { Possibile soluzione int intmax(int x, int y) { Problemi: si evita il controllo sui tipi si creano possibili errori sintattici Perche non usare semplici funzioni overloaded? double doublemax(double x, double y) { #define max(x,y) ((x>y)? x : y ) class foo { public: int max(int, int); // errore di sintassi Il meccanismo di template 2 Il meccanismo di template 1

Funzioni template Il meccanismo di template permette di definire un modello per una famiglia di funzioni (overloaded) correlate, facendo in modo che lo stesso tipo di dato sia un parametro Definizione di funzione template Utilizzo di funzione template int i, j; TipoBuono a, b; j=max(i,0); TipoBuono risult=max(a,b); > DEVE ESSERE DEFINITO PER MioTipo!!! Il meccanismo di template 3 Generazione di istanze di funzioni template La generazione delle specifiche istanze di funzione avviene a tempo di compilazione. La generazione avviene al momento in cui, nel codice sorgente, la si utilizza con tipi di dato definiti (non generici). Generazione di int max(int x, int y); Generazione di double max(double x,double y); ERRORE void f(int i, double d) { cout << max(i, i); cout << max(d, d); // cout << max(i, d); Il meccanismo di template 4 Il meccanismo di template 2

Funzioni template implicite ed esplicite Una specifica istanza di funzione template puo` essere usata direttamente, senza essere re-dichiarata (come nell esempio precedente): si parla allora di funzione template implicita Una istanza specifica di funzione template puo` essere re-dichiarata, informando preventivamante il compilatore della sua presenza all interno del codice: si parla allora di funzione template esplicita Una funzione template esplicita partecipa integralmente alla risoluzione dell overloading, attraverso le conversioni standard di tipo (questo non avviene per le implicite) CORRETTO double max(double, double); void f(int i, double d) { cout << max(i, i); cout << max(d, d); cout << max(i, d); Il meccanismo di template 5 Funzioni template per tipi specifici (specializzazione) In alcuni casi speciali, la definizione della funzione template puo` essere non appropriata con particolari tipi. In questo caso, si puo` provvedere a definire una specializzazione della funzione per un tipo particolare. Il compilatore non genera istanze della funzione template per cui sono state definite specializzazioni. funzione template generica funzione template specializzata #include <string.h> char *max(char *x, char*y) { return (strcmp(x, y)>0)? x : y; Il meccanismo di template 6 Il meccanismo di template 3

Classi template Lo stesso procedimento di generalizzazione che porta alle funzioni template, si puo` applicare alle classi. Si ottengono cosi` le classi template, chiamate anche generatori di classi Definizione di classe template Utilizzo di classe template template <class MyType> class MyClass { // i membri possono usare il tipo MyType MyClass<int> w, z; MyClass<Personaggio> pluto; Il meccanismo di template 7 Istanze di classi template Un istanza di classe template è una classe specifica Il compilatore deve conoscere la definizione di una classe modello, per poterne generare specifiche istanze (non basta la dichiarazione): quindi occorre includere anche il file sorgente con la relativa definizione. Come per le funzioni template, si possono definire specializzazioni di classi template. Ogni classe specifica ha una sua copia di membri statici, distinti da quelli di altre classi istanza. In modo analogo, le istanze di funzioni template hanno una loro copia di variabili automatiche static. Il meccanismo di template 8 Il meccanismo di template 4

Operatore :: con classi template /*** DICHIARAZIONE ***/ class ClT { TipoT stato1; public: ClT(int); int funz1(tipot, int); TipoT funz2(); /*** DEFINIZIONI ***/ ClT<TipoT>::ClT(int i) {.. int ClT<TipoT>::funz1(TipoT x, int i) {.. TipoT ClT<TipoT>::funz2() {.. Quale sintassi per un metodo che restituisce un tipo definito internamente alla classe template? Il meccanismo di template 9 Argomenti in classi template La parola chiave template ammette argomenti multipli. template <class T1, class T2, int dimensione = 128> class MyBuffer {..; Il valore fornito come argomento di tipo non template deve essere un espressione costante. const int n = 1024; int k = 256; MyBuffer<int, double, 64+n/4> bufintdoub; // corretto MyBuffer<char, char, k*2> bufcharchar; // errore! Gli argomenti di una classe template, analogamente a quelli di una qualsiasi funzione, possono avere inizializzatori (valori default). Il meccanismo di template 10 Il meccanismo di template 5

Uso di parentesi angolari Occorre porre attenzione nell uso delle parentesi angolari, in fase di istanziazione di template, come testimoniato dal seguente esempio MyBuffer<int, int, (x>100? 256 : 128)> bufquattro; Le parentesi tonde sono necessarie, e togliendole abbiamo un errore sintattico: MyBuffer<int, int, x>100? 256 : 128> bufquattro; ERRORE!!! CHIUSURA PREMATURA! Il meccanismo di template 11 Dichiarazioni friend in classi template Vi possono essere vari usi di dichiarazioni friend in classi template: Una classe o funzione normale: tutte le istanze di template hanno tale classe o funzione come friend. Un altra classe (o funzione) template, con alcuni stessi argomenti: caso delicato. Un altra classe (o funzione) template, con tutti argomenti diversi: tutte le istanze di template hanno tale classe o funzione come friend. In ogni caso, è buona regola evitare situazioni poco chiare Il meccanismo di template 12 Il meccanismo di template 6