Lo streaming di input/output
Chi ha letto la guida al C, leggendo il codice proposto per verificare il funzionamento del compilatore, avrà notato che vi è un diverso modo di chiamare una stampa a video. Infatti con il C++ si abbandonano le funzioni printf() e scanf() e tutta la libreria stdio.h a vantaggio dei nuovi operatori di streaming:
Questi operatori sono contenuti all'interno della librerie iostream che dovrà essere inclusa nel nostro codice come al solito.
Grazie allo streaming si risolvono tutte le problematiche dovute all'uso di specificatori all'interno delle funzioni printf() e scanf() in quanto sarà il compilatore stesso a farsi carico dell'assegnazione del giusto tipo ad una data variabile. Facciamo un esempio:
// Controlla se due numeri sono multipli
#include <iostream>
//usa lo spazio dei nomi standard
using namespace std;
//prototipo della funzione
void multiple (int, int ) ;
int main()
{
//dichiarazione di due interi
int a, b;
cout << "Inserisci due interi:" << endl;
//acquisizione di due interi
cin >> a >> b;
//invocazione della funzione
multiple (a,b);
system("PAUSE");
return 0;
}
//dichiarazione della funzione
void multiple (int x, int y )
{
//dichiarazione di una variabile boolenana
bool risultato;
//due if innestati per stabilire se x è o meno
//multiplo di y
if (x >= y )
{
risultato = x%y ;
if ( risultato == 0 )
cout << x << " e' multiplo di " << y << endl;
else
cout << x << " non e' multiplo di " << y << endl;
}
if (x < y )
{
risultato = y%x;
if ( risultato == 0 )
cout << y << " e' multiplo di " << x << endl;
else
cout << y << " non e' multiplo di " << x << endl;
}
}
Analizziamo il codice: tale programma non fa altro che controllare se un numero è multiplo di un altro utilizzando l'operatore % che indica il resto di una divisione, quindi se un numero è multiplo di un altro allora il resto sarà pari a zero.
using namespace std: indica che si intende usare lo spazio dei nomi standard. Questa è una delle nuove caratteristiche del C++ che permette di evitare conflitti con i vari header file che si andranno a creare, in particolare questa istruzione indica che si adopereranno librerie standard del C++ e non librerie proprie.
void multiple (int, int ); è il prototipo della funzione che deve calcolare se i numeri sono multipli; essa non deve restituire nulla quindi è dichiarata void, notiamo che essa accetta in ingresso due parametri di tipo intero.
All'interno del main vengono poi dichiarati due interi a e b i quali ci serviranno per le operazioni di input.
cout << "Inserisci due interi:" << endl;
cout significa che vogliamo mandare in output a video ciò che segue il simbolo << in questo caso ciò che è riportato tra doppi apici "......" viene stampato a video interpretato come una stringa di caratteri, invece endl sta per vai a capo (cosa che in C facevamo usando \n).
cin >> a >> b;
cin indica che vogliamo acquisire un dato da tastiera e memorizzarlo nella variabile indicata dopo il simbolo >> nel nostro caso prima la variabile a poi quella b.
Notiamo come non è più necessario specificare che quelli in input sono dei dati interi %d come avviene nel C, sarà il compilatore stesso ad interpretare per noi tale dato.
multiple (a,b);
come al solito è il modo in cui si richiama una funzione, in questo caso gli passiamo i parametri a e b.
return 0;
come nel C indica che il main è terminato correttamente.
void multiple (int x, int y )
indica che da qui in poi vi è la dichiarazione della funzione multiple che non restituirà nulla e i cui valori di input di tipo intero saranno chiamati x e y.
Segue un if in cui si entra nel caso in cui x è maggiore o uguale di y; a questo punto si effettua l'istruzione risultato = x%y in cui si calcola il resto di x per y. Segue un if...else dove viene stampata la frase "x è multiplo di y" oppure "x non è multiplo di y" a seconda del valore contenuto in risultato.
Nota: anche il cout non ha più bisogno di specificatori di tipo basta porre nello streaming il dato che si vuole quando lo si vuole mandare in stampa cosi facendo l'istruzione cout << x << " e' multiplo di " << y << endl; produrrà in output video la seguente frase supposto x = 30 e y = 5 30 è multiplo di 5.
L'altro if viene usato quando x è minore di y per invertire l'ordine di divisore e dividendo per ottenere il resto fra i due.
E' possibile effettuare un casting (cambiare il tipo della variabile) sui dati mandati in output direttamente nello streaming. Per fare ciò basta usare delle parentesi tonde che contengano il tipo in cui si vuole trasformare il nostro dato nel seguente modo:
#include <iostream>
using namespace std;
float x;
char a;
int main()
{
cout << "Immetti un numero reale (float) ";
cin >> x ;
cout << "Immetti un carattere (char)";
cin >> a;
cout << "Il numero immesso e' " << x
<< " convertito in intero e' " << (int) x
<< endl;
cout << "Il carattere immesso e' " << a
<< " il suo valore ASCII e' " << (int) a
<< endl;
system("PAUSE");
}
L'output sarà il seguente:
Immetti un numero reale (float) 3.999
Immetti un carattere (char) g
Il numero immesso e' 3.999 convertito in intero e' 3
Il carattere immesso e' g il suo valore ASCII e' 103
Premere un tasto per continuare . . .
Nell'output i valori immessi dall'utente sono stati scritti in grassetto quelli trasformati dopo il cast in corsivo.







