Corso di Programmazione a oggetti

Documenti analoghi
Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Funzioni, Stack e Visibilità delle Variabili in C

Il C nel C++: Funzioni

Linguaggio C - sezione dichiarativa: costanti e variabili

Programmazione ad oggetti

Laboratorio di programmazione

Programmazione Procedurale in Linguaggio C++

I/O FILE. Sommario I/O FILE. I/O FILE LETTURA DA FILE DI TESTO oggetto di tipo ifstream. I/O FILE: lettura e scrittura su file di testo

Tipi di dati scalari (casting e puntatori) Alessandra Giordani Lunedì 10 maggio 2010

Tipi di dato. Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi:

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

Fondamenti di Informatica

Esercizi Programmazione I

Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri

Strategie di programmazione

Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali:

Funzioni e. Alessandra Giordani Mercoledì 16 maggio 2012

uguale livello gerarchico non vi sono funzioni più importanti di altre main main

La struttura dati ad albero binario

Laboratorio di programmazione

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

Programmazione Procedurale in Linguaggio C++

Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1

Generalizzazione di funzioni e di classi. Macro come funzioni generiche

Corso di Programmazione ad Oggetti

STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe

Fondamenti di Informatica T-1 Modulo 2

Obiettivi di questa esercitazione

Informatica 3. Informatica 3. LEZIONE 2: Sintassi e semantica. Lezione 2- Modulo 1. Le componenti di un linguaggio di programmazione

14 - Metodi e Costruttori

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Il primo programma C++

Linguaggio C. Tipi predefiniti e operatori. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Capitolo 5 - Funzioni

Indice. Ordine di valutazione. Espressioni in C++ Le espressioni in C++ (CAP 4) Alberto Garfagnini e Marco Mazzocco A.A. 2014/ * 20 / 2

Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN

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

Fondamenti di Informatica

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori

Università degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Stringhe. Anno Accademico 2010/2011 Francesco Tortorella

Corso di Programmazione ad Oggetti

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

Linguaggio C: introduzione

Scope delle variabili e passaggio parametri. Danilo Ardagna Politecnico di Milano

Concetto di Funzione e Procedura METODI in Java

nome (lista_parametri) Funzioni funzioni predefinite: sqrt(x) log(x) usare queste funzioni significa: specificare il valore degli argomenti

Primi passi col linguaggio C

Esempio: Costruttori ed ereditarietà

Il paradigma OO e le Classi

Linguaggio C: le funzioni. Introduzione e sintassi

Conversioni fra Tipi di Dati. Luca Abeni

Strutture Dati. Elisa Marengo. Università degli Studi di Torino Dipartimento di Informatica. Elisa Marengo (UNITO) Strutture Dati 1 / 16

La selezione binaria

Programmazione (imperativa)

Vediamo come allocare dinamicamente un vettore di double: int dim; double *vect; cout << Dimmi la dimensione del vettore : ; cin >> dim;

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

Funzioni, puntatori, strutture. Lab. Calc. AA 2006/07

I puntatori (richiamo)

# $ %$&'" '! () *$+,!-

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Operatore di indirizzo

Espressioni. Espressione = meccanismo fondamentale per esprimere computazioni in un LP importante comprenderne la semantica!

Laboratorio di Informatica

Fondamenti di Informatica T-1 Modulo 2

Il potere espressivo di un linguaggio è caratterizzato da: PROGRAMMA = DATI + CONTROLLO

Tipi di dato personalizzati Array di struct. Tipi di dato utente. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.

Grammatica di base: Pointers

Funzioni in C. Violetta Lonati

Lezione 4. Costruttori

Linguaggi ad oggetti (object oriented) LINGUAGGI DI PROGRAMMAZIONE: PARADIGMI DI PROGRAMMAZIONE. Programmazione ad oggetti

Corso di Programmazione ad Oggetti

STRUTTURA DI UN PROGRAMMA

Ingredienti sintattici di Java

LA CODIFICA DELL INFORMAZIONE. Introduzione ai sistemi informatici D. Sciuto, G. Buonanno, L. Mari, McGraw-Hill Cap.2

Unità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma.

6SC Informatica 9/12/2015

LINGUAGGI DI PROGRAMMAZIONE!

Tipi di dato. Le variabili in C. Problema: dato in input un carattere, se esso è una lettera minuscola, trasformarla in maiuscola.

ARRAY E STRINGHE. ESERCIZIO 2 Scrivere un programma che calcola il numero di doppie e di dittonghi (2 vocali vicine) presenti in una stringa.

Lab 02 Tipi semplici in C

puntatori Lab. Calc. AA 2007/08 1

Complementi sui sottoprogrammi

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

Linguaggio C: le funzioni. Introduzione e sintassi

Programmazione in Java (I modulo)

Algoritmi e basi del C Struttura di un programma

Espressioni ed operatori in C

Un elaboratore è un manipolatore di simboli (segni) intrinsecamente capace di trattare vari. caratteri char caratteri ASCII unsigned char

Funzioni. Unità 1. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Informatica Generale Andrea Corradini I linguaggi di programmazione

Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit

ESERCIZI DI PROGRAMMAZIONE C/C++ per le classi seconde

Programmazione modulare

Esiste però anche un ambiente globale: quello dove tutte le funzioni sono definite. Qui si possono anche definire variabili, dette variabili globali

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

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

ESERCIZIO 1 (Definizione funzioni passaggio parametri per copia)

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

Array multidimensionali e stringhe

Transcript:

Corso di Programmazione a oggetti Overloading delle funzioni e parametri di default a.a. 2014/2015 Francesco Fontanella

Overloading delle funzioni In C++, è possibile dare a funzioni diverse lo stesso nome, a condizione che le funzioni abbiano liste di parametri diverse (in numero e/o tipo). Il compilatore è in grado di associare in modo univoco ciascuna chiamata a una delle funzioni, distinte in base alla lista degli argomenti a.a. 2014/2015 2

Esempio Pensiamo di voler definire delle funzioni di incremento di puntatori per diversi possibili casi. Volendo però usare lo stesso nome. // A: incrementa di uno la variabile di tipo int void incr(int &x) { x++; // B: incrementa di uno una variabile di tipo float void incr(float &x) { x = x + 1.0; SEGUE... a.a. 2014/2015 3

// C: incrementa di dx la variabile di tipo int void incr(int &x, int dx) { x += dx; main () { float a=0.0; int i = 1; int d = 10; incr(a); // versione B: si incrementa x (float) incr(i); // versione A: si incrementa i (int) incr(i, d); // versione C: si incrementa i di d a.a. 2014/2015 4

La firma delle funzioni Quando uno stesso nome corrisponde a più funzioni, si dice che tale nome è sovraccaricato (overloaded) di significato. La cosiddetta Firma (signature) di una funzione è costituita da: nome + tipo dei parametri a.a. 2014/2015 5

In presenza della chiamata di una funzione overloaded, il compilatore riconosce quella che ( meglio ) si adatta alla chiamata (occhio alle conversioni implicite di tipo!) Avere tipi di ritorno diversi non è sufficiente a distinguere le funzioni Nell istruzione di chiamata infatti può non essere evidente il tipo del valore di ritorno. a.a. 2014/2015 6

Overloading di funzioni e ambiguità Esistono situazioni in cui il compilatore non è in grado di distinguere tra due o più funzioni in overloading. In questo caso si parla di ambiguità. Le ambiguità generano errori di compilazione. Le situazioni ambigue sono di solito causate dalle conversioni automatiche di tipo. a.a. 2014/2015 7

Esempio double myfunc(double i); // versione A float myfunc(float i); // versione B int main() { myfunc(10.1); myfunc(10); return 0; NON AMBIGUA: chiama la A. le costanti con virgola mobile sono automaticamente di tipo double AMBIGUA: come deve essere convertita la costante? In float o double? a.a. 2014/2015 8

Parametri di default

Parametri di default In C++ è possibile specificare dei valori default per i parametri. Questi parametri possono essere gli ultimi (oppure tutti). IMPORTANTE!: E il prototipo che deve specificare gli argomenti di default. Se l invocazione della funzione non specifica gli ultimi argomenti, questi vengono assunti uguali agli argomenti di default. a.a. 2014/2015 10

void myfunc(int a, int b, int c =0); int main() { int x,y; myfunc(x,y); La funzione prende 3 parametri, il terzo è omesso in quanto è quello di default (che vale 0) a.a. 2014/2015 11

void PrintValues(int val1, int val2=10) { cout << "1st value: " << nvalue1 << endl; cout << "2nd value: " << nvalue2 << endl; int main() { PrintValues(1); // secondo parametro: default(è 10) PrintValues(3, 4); // secondo parametro: è 4 return; OUTPUT 1st value: 1 2nd value: 10 1st value: 3 2nd value: 4 a.a. 2014/2015 12

Una funzione può avere tutti i parametri di default: void PrintValues(int val1=10, int val2=10, int val3=30) { cout<<"values: "<<val1<<" "<<val3<<" "<< val3<<endl; int main() { PrintValues(1, 2, 3); PrintValues(1, 2); PrintValues(1); PrintValues(); return; OUTPUT Values: 1 2 3 Values: 1 2 30 Values: 1 20 30 Values: 10 20 30 a.a. 2014/2015 13

Per fornire un valore diverso da quello di default per val3 è necessario fornire anche i valori di default per val1 e val2 PrintValues(10, 20, 3); Infatti la chiamata: PrintValues(3); è equivalente a PrintValues(3, 20, 30); a.a. 2014/2015 14

I parametri di default devono stare per ultimi: void PrintValue(int val1=10, int val2); vietato! I parametri di default più a sinistra dovrebbero essere quelli che più di frequente sono diversi da quelli di default. a.a. 2014/2015 15