|
Tutorial
3
Scritto da Roberto Navigli (roberto.navigli@iol.it)
Game Programming Italia: www.gpi.eden.it
Introduzione alle funzioni
Come
già detto, una funzione è implementata
mediante una o più istruzioni che svolgono
un determinato compito. In genere, il nome della funzione
indica il compito che essa svolge. Ad esempio, una
funzione che calcola la radice quadrata si chiamerà
radice_quadrata, una funzione che calcola il logaritmo
di un numero si chiamerà log e così
via. In generale, una funzione può assumere
un qualsiasi nome, a meno di casi specifici. Ricordiamo,
ad esempio, che la funzione main ha un preciso significato
e che rappresenta il punto di inizio di ogni programma
C++.
Vediamo
un esempio che definisce alcune funzioni:
/*
definiamo alcune funzioni */
#include <iostream>
using
namespace std;
void
stampa()
{
cout << "stampa()" << endl;
}
int
successore(int a)
{
return a+1;
}
void
main()
{
stampa();
int x;
x = successore(10);
cout << "successore di 10: " <<
x << endl;
}
La
prima funzione non prende nulla in input e non restituisce
nulla. Il suo compito è quello di stampare
la seguente stringa e andare a capo:
stampa()
La
seconda funzione implementa il successore, una nota
funzione matematica che dato x restituisce x+1. Esaminiamo
l'intestazione della funzione:
int
successore(int a)
La
funzione prende in input un intero (associato alla
variabile a) e restituisce in output un altro intero.
Il corpo della funzione è specificato dal blocco
seguente:
{
return a+1;
}
Tutto
quello che fa è restituire, mediante la parola
chiave return, il valore dell'espressione a+1, che
è proprio il successore di a. Si faccia attenzione
al fatto che a è una variabile locale, ovvero
non è visibile all'esterno della funzione.
Ma su questo torneremo in seguito.
Il
corpo della funzione main fa quattro cose: chiama
la funzione stampa,
stampa();
dichiara la variabile x di tipo intero,
int
x;
le
assegna il successore di 10 (chiamando l'omonima funzione)
x
= successore(10);
e
infine stampa il valore di x:
cout
<< "successore di 10: " << x
<< endl;
Ricapitolando,
la forma generica per definire una funzione è
la seguente:
tipo-da-restituire
nome-della-funzione(lista dei parametri)
{
// corpo della funzione
}
La
forma generica per chiamare una funzione è
la seguente:
nome-della-funzione(parametro1,
parametro2,
, parametron);
Nel
caso in cui la funzione restituisca valore è
possibile memorizzare tale valore in una variabile
del medesimo tipo, come si è fatto nell'esempio
precedente con la chiamata a successore(10) che restituisce
un intero il cui valore è memorizzato in una
variabile dello stesso tipo.
|