Guida C/C++

Materie:Appunti
Categoria:Informatica
Download:48
Data:24.01.2007
Numero di pagine:16
Formato di file:.doc (Microsoft Word)
Download   Anteprima
guida_2.zip (Dimensione: 125.05 Kb)
trucheck.it_guida-c-c++.doc     273.5 Kb
readme.txt     59 Bytes


Testo

INTRODUZIONE

Come e' facile intuire, il linguaggio C++ è un'estensione del linguaggio C. In particolare, il C++ conserva tutti i punti di forza del C, come la potenza e la flessibilità di gestione dell'interfaccia hardware e software, la possibilità di programmare a basso livello e l'efficienza, l'economia e le espressioni, tipiche del C. Ma, in più, il C++ introduce il dinamico mondo della programmazione orientata agli oggetti che rende tale linguaggio una piattaforma ideale per l'astrazione dei problemi di alto livello.
Il C++ fonde, quindi, i costrutti tipici dei linguaggi procedurali standard, familiari per molti programmatori, con il modello di programmazione orientata agli oggetti, che può essere pienamente sfruttato per produrre soluzioni completamente orientate agli oggetti di un determinato problema. In pratica, una applicazione C++ riflette questa dualità incorporando sia il modello di programmazione procedurale che il modello di programmazione orientato agli oggetti.
Questa guida al C++ si rivolge a chi si volge allo straordinario mondo della programmazione per la prima volta o, anche, a chi ha desiderio di rispolverare qualche concetto non troppo chiaro. L'obiettivo, in ogni caso, non è certamente quello di fornire una descrizione approfondita di tutte le potenzialità della programmazione ad oggetti ma, più semplicemente, quello di fornire al programmatore una panoramica del C++ che lo renda presto in grado di scrivere applicazioni funzionanti.
STORIA DEL C++
Non dovrebbe sorprendere più di tanto il fatto che il C++ abbia un'origine simile al C. Lo sviluppo del linguaggio C++ all'inizio degli anni Ottanta è dovuto a Bjarne Stroustrup dei laboratori Bell (Stroustrup ammette che il nome di questo nuovo linguaggio è dovuto a Rick Mascitti). Originariamente il C++ era stato sviluppato per risolvere alcune simulazioni molto rigorose e guidate da eventi; per questo tipo di applicazione la scelta della massima efficienza precludeva l'impiego di altri linguaggi.
Il linguaggio C++ venne utilizzato all'esterno del gruppo di sviluppo di Stroustrup nel 1983 e, fino all'estate del 1987, il linguaggio fu soggetto a una naturale evoluzione.
Uno degli scopi principali del C++ era quello di mantenere piena compatibilità con il C. L'idea era quella di conservare l'integrità di molte librerie C e l'uso degli strumenti sviluppati per il C. Grazie all'alto livello di successo nel raggiungimento di questo obiettivo, molti programmatori trovano la transizione al linguaggio C++ molto più semplice rispetto alla transizione da altri linguaggi (ad esempio il FORtrAN) al C.
Il C++ consente lo sviluppo di software su larga scala. Grazie a un maggiore rigore sul controllo dei tipi, molti degli effetti collaterali tipici del C, divengono impossibili in C++.
Il miglioramento più significativo del linguaggio C++ è il supporto della programmazione orientata agli oggetti (Object Oriented Programming: OOP), Per sfruttare tutti i benefici introdotti dal C++ occorre cambiare approccio nella soluzione dei problemi. Ad esempio, occorre identificare gli oggetti e le operazioni ad essi associate e costruire tutte le classi e le sottoclassi necessarie.
PROGRAMMAZIONE AD OGGETTI
La programmazione ad oggetti è ormai affermata e trova sempre maggiore successo nell'ambito della progettazione e dello sviluppo del software. La programmazione ad oggetti rappresenta un modo di pensare in modo astratto ad un problema, utilizzando concetti del mondo reale piuttosto che concetti legati al computer. In tal modo si riescono a comprendere meglio i requisiti dell'utente, si ottengono dei progetti più chiari e ne risultano sistemi software in cui la manutenzione è decisamente più facile. Gli oggetti costituiscono il costrutto fondamentale di tale filosofia. Un oggetto è una singola entità che combina sia strutture dati che comportamenti: i dati sono visti come variabili e le procedure per accedere ai dati sono viste come metodi (o funzioni).
Gli oggetti, in sostanza, possono essere visti come dei mattoni che possono essere assemblati e che hanno un alto potenziale di riutilizzo. Infatti uno dei benefici principali ed uno dei motivi per cui è stata sviluppata la programmazione ad oggetti è proprio quello di favorire il riutilizzo del software sviluppato.
In seguito, in questa guida, approfondiremo il concetto di programmazione orientata agli oggetti.
MIGLIORAMENTI RISPETTO AL C
Le sezioni che seguono indicano i miglioramenti di lieve entità (che non hanno nulla a che fare con gli oggetti) rispetto al linguaggio C.
Commenti
Il C++ introduce il delimitatore di "commento fino a fine riga" //. Viene però conservato l'uso dei delimitatori /* e */.
Nome delle enumerazioni
Il nome delle enumerazioni è un nome di tipo. Questa possibilità semplifica la notazione poiché non richiede l'uso del qualificatore enum davanti al nome di un tipo enumerativo.
Nomi delle classi
Il nome di una classe è un nome di tipo. Questo costrutto non esiste in C. In C++ non è necessario usare il qualificatore class davanti ai nomi rispettivamente delle classi.
Dichiarazioni di blocchi
Il C++ consente l'uso di dichiarazioni all'interno dei blocchi e dopo le istruzioni di codice. Questa possibilità consente di dichiarare un identificatore più vicino al punto in cui viene utilizzato per la prima volta. E' perfino possibile dichiarare l'indice di un ciclo all'interno del ciclo stesso.
Operatore di qualifica della visibilità
L'operatore di qualifica della visibilità :: (detto anche operatore di scope) è un nuovo operatore utilizzato per risolvere i conflitti di nome. Ad esempio, se una funzione ha una dichiarazione locale della variabile vettore ed esiste una variabile globale vettore, il qualificatore ::vettore consente di accedere alla variabile globale anche dall'interno del campo di visibilità della variabile locale. Non è possibile l'operazione inversa.
Lo specificatore const
Lo specificatore const consente di bloccare il valore di un'entità all'interno del suo campo di visibilità. E' anche possibile bloccare i dati indirizzati da una variabile puntatore, l'indirizzo di un puntatore e perfino l'indirizzo del puntatore e dei dati puntati.
Overloading delle funzioni
In C++, più funzioni possono utilizzare lo stesso nome; la distinzione si basa sul numero e sul tipo dei parametri.
Valori standard per i parametri delle funzioni
E' possibile richiamare una funzione utilizzando un numero di parametri inferiori rispetto a quelli dichiarati. I parametri mancanti assumeranno valori di standard.
Gli operatori new e delete
Gli operatori new e delete lasciano al programmatore il controllo della allocazione e della deallocazione della memoria dello heap.
GLI ELEMENTI PRINCIPALI DI UN PROGRAMMA C
Come abbiamo detto in precedenza, Il C++ è un linguaggio derivato dal C, che conserva con questo una completa compatibilità. Sarà, dunque, necessario per poter muovere i primi passi verso la programmazione in C++ procedere alla conoscenza di quei concetti e di quegli elementi del linguaggio C che sono alla base della programmazione in C++.
Alla fine di questo capitolo si dovrebbe essere in grado di scrivere un programma breve ma funzionante.
Le cinque componenti fondamentali di un programma C/C++
• I programmi devono contenere informazioni da una sorgente di unput.
• I programmi devono decidere il modo in cui questo input deve essere manipolato e memorizzato.
• I programmi devono usare una serie di istruzioni di manipolazione dell'input. Queste istruzioni possono essere suddivise in quattro categorie principali: singole istruzioni, istruzioni condizionali, cicli e funzioni.
• I programmi devono produrre un qualche tipo di rapporto sulla manipolazione dei dati.
• Un'applicazione ben realizzata incorpora tutti gli elementi fondamentali appena elencati con un progetto modulare, con codice autodocumentante (ad esempio nomi di variabili di senso compiuto) e un rigoroso schema di indentazione.
Come creare e compilare un progetto in C++
Il processo di creazione e compilazione di un progetto in C++ dipende strettamente dal tipo di computer e di sistema operativo che si utilizza. Poichè la maggior parte dei neofiti utilizza, probabilmente, l'ambiente Windows a 32 bit (Windows 95, Windows 98, Windows NT, etc.) e, di conseguenza, il Microsoft Visual Studio, vedremo di definire con un semplice esempio pratico quali sono i passi da seguire per la creazione e la successiva compilazione di un progetto C++.
Per creare un nuovo progetto, si procede così:
• Lanciare Microsoft Visual Studio
• Dal Menù File selezionare la voce New...
• Apparirà la Finestra "New". Selezionare nella lista a sinistra, sotto la scheda Projects la voce Win32 Console Application. Scegliere a destra il nome del progetto e la locazione (la directory del disco) in cui salvare il progetto stesso. Quindi premere OK.
A questo punto il progetto è stato creato.
Occorre ora aggiungere al progetto uno o più files, che conterranno il codice C++, uno dei quali ( e soltanto uno) deve contenere la funzione main. Si procede così:
• Dal menù File, selezionare New...
• Apparirà di nuovo la Finestra "New".
• Selezionare la scheda Files
• Selezionare la casella Add to project e premere Ok.
• Selezionare nella lista a sinistra la voce C++ Source File se si vuole creare un file con estensione .cpp oppure selezionare la voce C/C++ Header File se si vuole creare un file con estensione .h.
• Editare il file che si è creato aggiungendo tutte le istruzioni C++ necessarie. Quindi salvare il file stesso utilizzando la voce Save dal menu' File.
• Procedere in questo modo per tutti i file che si intende aggiungere al progetto.
Riportiamo, per maggiore comprensione la sequenza grafica delle operazioni descritte:

E', altresì, possibile importare dei file .cpp o .h in un progetto esistente. Per eseguire tale operazione, si procede così:
• Selezionare dal Menu' File, la voce Open
• Apparirà la seguente finestra:

• Selezionare il file che si desidera aprire (nell'esempio sopra è cane.cpp).
• Premere quindi il tasto Open.
• A questo punto il file verrà visualizzato all'interno del Visual Studio.
• Con il tasto destro del mouse cliccare all'interno della finestra che visualizza il file.
• Selezionare quindi la voce Insert File into Project e selezionare, quindi, il nome del progetto a cui aggiungere il file. Ad esempio:

Dopo aver inserito tutti i file necessari al progetto si deve procedere alla compilazione per poter poi eseguire il progetto stesso.
Per compilare l'intero progetto selezionare il menù Build e selezionare la voce Build MioProg.exe.
Nella finestra dei Messaggi in basso apparirà il risultato della compilazione. Se non ci sono stati errori, verrà visualizzata la frase: 0 Errors, 0 Warnings. In caso contrario, il compilatore indicherà le righe di codice in cui sono stati riscontrati dei problemi e quindi avviserà il programmatore che non è stato possibile creare l'eseguibile.
Quando non vengono più riscontrati errori è possibile eseguire il progetto. Sarà sufficiente aprire il Menù Build e selezionare la voce Execute MioProg.exe.
Naturalmente il Visual Studio è uno strumento molto potente che consente di eseguire molte altre operazioni più complesse che però esulano da questo tutorial. Chi volesse approfondire tale argomento può fare riferimento alla guida in linea del Visual Studio stesso.
Nota: Il procedimento sopra descritto è relativo alla versione 5.0 del Microsoft Visual Studio.
Il procedimento di compilazione è, decisamente, più semplice se si preferisce utilizzare l'ambiente Unix. Infatti, il sistema operativo Unix è fornito del compilatore gcc (dove la lettera g sta per GNU, un progetto sviluppato per la compilazione dei programmi in ambiente Unix dalla Free Software Foundation).
Per compilare un file test.cpp contenente un programma sarà sufficiente digitare al prompt dei comandi:
g++ test.cpp -o test
ed ottenere automaticamente il programma eseguibile.
Naturalmente, nel caso di programmi più complessi sarà necessaria una maggiore conoscenza delle opzioni di compilazione.
Il seguente programma C++ illustra le componenti fondamentali di un'applicazione C++.
//
// PRIMO.CPP
// Il primo esempio in C++
//

#include

main()
{
cout
rappresenta una delle funzionalità tipiche del C++, nota come istruzione per il preprocessore. Una istruzione per il preprocessore è, fondamentalmente, una istruzione di precompilazione. Nel nostro caso, l'istruzione chiede al compilatore di ricercare il codice memorizzato nel file iostream.h e di inserirlo nel punto indicato del codice sorgente. Un file come iostream.h viene chiamato file di intestazione (o file header). Tali file, di solito, includono la definizione di classi, costanti simboliche, identificatori e prototipi di funzione. In seguito vedremo bene di cosa si tratta.
Dopo l'istruzione #include si trova la dichiarazione della funzione main():
main()
{
..............................................
return (0);
}
Ogni programma C++ è formato da chiamate a funzioni. Tutti i programmi C++ devono contenere una funzione chiamata main(). Tale funzione rappresenta il punto di inizio dell'esecuzione del programma che termina con l'istruzione return (0). E', anche, possibile utilizzare istruzioni return() senza parentesi.
Dopo l'intestazione della funzione main(), si trova il corpo della funzione stessa. Si noti la presenza dei simboli { e }. Dal punto di vista tecnico, le parentesi graffe permettono di incapsulare istruzioni composte. Tali istruzioni possono consistere nella definizione del corpo di una funzione (come accade nel nostro caso per la funzione main() ) oppure nel riunire più linee di codice che dipendono dalla stessa istruzione di controllo, come nel caso in cui diverse istruzioni vengono eseguite a seconda dela validità o meno del test di un'istruzione.
La riga:
cout raggio;
cout &&
• Operatore di OR -> ||
• Operatore di NOT -> !
Ognuno degli operatori precedenti prende in input uno o due booleani e restituisce in output un altro booleano.
Vediamo in dettaglio:
L'operatore di AND, prende in input due operandi e produce in output un booleano, attenendosi al seguente comportamento: Se entrambi gli operatori sono true allora l'output è true; in tutti gli altri casi l'output è uguale a false.
L'operatore di OR, prende in input due operandi e produce in output un booleano, attenendosi al seguente comportamente: Se almeno undo degli operandi è uguale a true, l'output è true; altrimenti, se nessuno dei due operandi è uguale a true l'output sarà false.
L'operatore di NOT, prendi in input un solo operando e produce in output un booleano, attenendosi al seguente comportamento: Se l'operando di input è true allora l'output sarà false. Se, invece l'operando di input è false, allora l'output sarà uguale a true. In altri termini, l'operatore di NOT prende un input e ne restituisce l'esatto contrario.
Vediamo ora alcuni esempi sull'utilizzo dei tre operatori definiti.
// Supponiamo che Gianni sia stanco
bool gianniStanco = true;

// Supponiamo pure che Gianni non sia costretto ad alzarsi presto
bool gianniDeveAlzarsiPresto = false;

// Andrà a letto ora Gianni?
Bool gianniSiCoricaOra = gianniStanco && gianniDeveAlzarsiPresto;
// Il risultato è false
L'esempio precedente è abbastanza semplice da comprendere. La prima variabile bool (gianniStanco) viene inizializzata a true, il che equivale a dire che Gianni è stanco. La seconda variabile bool (gianniDeveAlzarsiPresto) è inizializzata invece a false, il che vuol dire che Gianni non ha la necessità di alzarsi presto la mattina. La terza variabile booleana (gianniSiCoricaOra) è un risultato dell'operazione di AND tra le due precedenti. Ovvero: Gianni deve andare a letto adesso soltanto se è stanco e deve alzarsi la mattina presto. Quindi, l'operatore AND è il più adatto in tale circostanza.
Se, invece, Gianni decidesse di andare a letto se anche soltanto una delle due precondizioni fosse vera allora l'operatore da utilizzare sarebbe l'operatore OR. Avremo in tal caso:
bool gianniSiCoricaOra = gianniStanco || gianniDeveAlzarsiPresto;
// Il risultato è true
Se, ancora, si verifica la condizione:
gianniStanco = true

bool gianniInForma = !gianniStanco
// gianniInForma sarà uguale a false
Ovvero la variabile booleana gianniInForma sarà vera se non è vera quella che identifica Gianni stanco. Questo è un banale esempio dell'operatore NOT.
L'utilizzo degli operatori booleani è perfettamente lecito anche su variabili che non siano bool. In C++ il valore "0" equivale a false e qualunque valore diverso da zero equivale a true.
Ad esempio:
int ore = 4;
int minuti = 21;
int secondi = 0;

bool timeIstrue = ore && minuti && secondi;
Poiché il risultato deriva dall'esame dei tre operandi e c'e' un valore (secondi) che è uguale a zero (ovvero equivale a false) il risultato dell'espressione è false.

OPERATORI ARITMETICI
Il linguaggio C++ è dotato di tutti i comuni operatori aritmetici di somma (+), sottrazione (-), moltiplicazione (*), divisione (/) e modulo (%). I primi quattro operatori non richiedono alcuna spiegazione data la loro familiarità nell'uso comune.
L'operatore modulo, invece, è semplicemente un modo per restituire il resto di una divisione intera. Ad esempio:
int a = 3, b = 8, c = 0, d;

d = b %a; // restituisce 2
d = a % b; // restituisce 3

d = b % c; // restituisce un messaggio
di errore (divisione per zero).
OPERATORE DI ASSEGNAMENTO

L'operatore di assegnamento in C++, altro non fa che assegnare ad una variabile un determinato valore. E' importante dire che un'espressione contenente un operatore di assegnamento può quindi essere utilizzata anche all'interno di altre espressioni, come ad esempio:
x = 5 * (y = 3);
In questo esempio, alla variabile y viene assegnato il valore 3. Tale valore verrà moltiplicato per 5 e quindi, in definitiva, alla variabile x verrà assegnato il numero 15.
E', pero', caldamente sconsigliato l'utilizzo di tale pratica in quanto potrebbe rendere poco leggibili le espressioni. Vi sono, tuttavia, un paio di casi in cui questa possibilità viene normalmente sfruttata. Innanzitutto, si può assegnare a più variabili lo stesso valore, come in:
x = y = z = 4;
Il secondo tipo di utilizzo è molto frequente all'interno dei cicli while e for:
while ((c = getchar()) != EOF)
{
..........................................
}

oppure

for(int i = 0; i < 10; i++)
{
........................................
}
OPERATORI DI UGUAGLIANZA
Un operatore di uguaglianza è un operatore che verifica determinate condizioni come: "è minore di" oppure "è maggiore di" oppure ancora "è uguale a".
Un utilizzo intuitivo di tali operatori è quello che viene fatto per comparare due numeri. Un operatore di uguaglianza può essere determinante per la scelta di una determinata strada piuttosto che di un'altra. Ad esempio, se una determinata variabile supera un determinato valore potrebbe essere necessario chiamare una funzione per controllare altri parametri, e cosi' via.
Ma vediamo nella seguente tabella, l'elenco completo degli operatori di uguaglianza:
Operatori di Uguaglianza
Nome
Simbolo
Esempio d'uso
Risultato
Minore
bool ris = (3 > 8)
false
Uguale
=
bool ris = (5 == 5)
true
Minore Uguale
= 9)
false
Diverso
!=
bool ris = (4 != 9)
true

LIVELLI DI PRECEDENZA DEGLI OPERATORI
I livelli di precedenza degli operatori indicano l'ordine con cui gli operatori vengono valutati dal compilatore. Un operatore con precedenza maggiore verrà valutato per prima rispetto ad un operatore con precedenza minore, anche se quest'ultimo figura prima dell'operatore con precedenza maggiore.
Ecco un esempio:
int risultato = 4 + 5 * 7 + 3;
Quale sarà il risultato in questo caso? La risposta dipende proprio dalla precedenza degli operatori. In C++, l'operatore di moltiplicazione (*) ha precedenza rispetto all'operatore addizione (+). Ciò vuol dire che la moltiplicazione 5 * 7 avverrà prima di tutte le altre addizioni. Avremo quindi, al termine:
risultato = 4 + 35 + 3 = 42
Come operare allora se si volesse che l'operazione precedente venisse interpretata con un ordine diverso? Ad esempio, se si volesse che l'operatore di moltiplicazione venisse utilizzato per moltiplicare la somma di 4 + 5 con la somma di 7 + 3, come si dovrebbe procedere?
La risposta è semplicissima: basta utilizzare le parentesi tonde. Quindi basterà scrivere:
int risultato = (4 + 5) * (7 + 3);
e la variabile risultato, in questo caso, varrà 90.
E' molto importante capire che le parentesi risolvono praticamente il problema di conoscere la precedenza tra gli operatori. Personalmente consiglio vivamente l'uso delle parentesi in ogni situazione in cui vi sia la presenza di più operatori contemporaneamente anche perchè la lettura del codice ne risulta certamente migliorata.
Ad ogni modo, un livello di precedenza tra gli operatori esiste ed è giusto descriverlo. La tabella seguente è suddivisa in gruppi. Tutti gli operatori appartenenti ad uno stesso gruppo hanno lo stesso livello di precedenza mentre gli operatori appartenenti ad un gruppo hanno maggior precedenza di tutti gli altri operatori che compaiono nei gruppi sottostanti.
Operatore
Nome
!
Not
*
/
%
Moltiplicazione
Divisione
Modulo
+
-
Addizione
Sottrazione
=
Minore
Minore Uguale
Maggiore
Maggiore Uguale
==
!=
Uguale
Diverso
&&
AND
||
OR
=
Assegnamento

ISTRUZIONI IF E ELSE
Il C++ utilizza quattro istruzioni condizionali principali: if, if-else, ? condizionale e switch. Prima di affrontare tali istruzioni una per una, è bene dire che la maggior parte delle istruzioni condizionali conseente di eseguire in modo selettivo una singola riga di codice o una serie di righe di codice (che viene detto blocco di riche di codice). Quando all'istruzione condizionale è associata una sola riga di codice, non è necessario racchiudere l'istruzione da eseguire fra parentesi graffe. Se invece all'istruzione condizionale è associata una serie di righe di codice, il blocco di codice eseguibile dovrà essere racchiuso fra parentesi graffe. Personalmente, comunque, per una buona lettura del codice consiglio vivamente l'uso delle parentesi graffe anche quando l'istruzione da eseguire è soltanto una.
Le istruzioni if e else
Le istruzioni in oggetto sono molto intuitive se si considera che le parole inglesi if ed else corrispondono rispettivamente alle italiane se ed altrimenti. La sintassi di if è:
if ()
{
()
}

mentre se if è accompagnata da altre istruzioni alternative la sintassi è:

if()
{();
}
else
{()
}
oppure se è necessario condizionare anche le istruzioni rette da else:
if()
{
)
}
else if()
{
()
}
Si faccia attenzione a non dimenticare il punto e virgola prima dell'istruzione else. Ad esempio, se deve scrivere:

......
if(i>=0)
{
;
}
else
{
;
}
........
L'istruzione 1 verrà eseguita solo se i >= 0 mentre in caso contrario viene eseguita l'istruzione 2.
ISTRUZIONE SWITCH
Le istruzioni switch permettono di evitare noiose sequenze di if. Esse sono particolarmente utili quando in un programma si deve dare all'utente la possibilità di scegliere tra più opzioni. La sintassi di tali istruzioni è la seguente:
switch()
{
case ():
...( )
break;
case ()
...( )
break;
....
....
default:
// è opzionale
...( )
}
Il costrutto precedente esegue le seguenti operazioni:
• Valuta il valore dell'espressione intera passata come parametro all'istruzione switch.
• Rimanda lo svolgimento del programma al blocco in cui il parametro dell'istruzione case ha lo stesso valore di quello dell'istruzione switch.
• Se il blocco individuato termina con un'istruzione break allora il programma esce dallo switch.
• Altrimenti, vengono eseguiti anche i blocchi successivi finchè un'istruzione break non viene individuata oppure non si raggiunge l'ultimo blocco dello switch.
• Se nessun blocco corrisponde ad un valore uguale a quello dell'istruzione switch allora viene eseguito il blocco default, se presente.
Vediamo un paio di esempi per comprendere meglio quanto detto:
bool freddo, molto_freddo, caldo, molto_caldo;
switch (temperatura)
{
case(10):
freddo = true;
molto_freddo = false;
caldo = false;
molto_caldo = false
break;
case(2):
freddo = true;
molto_freddo = true;
caldo = false;
molto_caldo = false;
break;
case(28):
freddo = false;
molto_freddo = false;
caldo = true;
molto_caldo = false;
break;
case(40):
freddo = false,
molto_freddo = false;
caldo = true;
molto_caldo = true;
break;
default:
freddo = false;
molto_freddo = false;
caldo = false;
molto_caldo = false;
Nell'esempio precedente, viene valutato il valore costante temperatura passato come parametro a switch. A secondo del valore che tale costante assume viene poi eseguito il relativo blocco di istruzioni. Se, invece, nessuno dei blocchi ha un valore uguale a quello passato a switch, verrà eseguito il blocco default.
Si noti, che nel caso seguente:
...........

case(28):
freddo = false;
molto_freddo = false;
caldo = true;
molto_caldo = false;
case(40):
freddo = false,
molto_freddo = false;
caldo = true;
molto_caldo = true;
break;
................
se il valore della temperatura fosse di 28 gradi, verrebbe giustamente eseguito il blocco corrispondente, ma poichè manca l'istruzione break alla fine di tale blocco, il programma avrebbe continuato ad eseguire anche le istruzioni del blocco successivo (quello con la temperatura uguale a 40 gradi) e quindi il valore finale delle variabili sarebbe stato:
freddo = false;
molto_freddo = false;
caldo = true;
molto_caldo = true;

ISTRUZIONE CONDIZIONALE ?
L'istruzione condizionale ? fornisce un modo rapido per scrivere una condizione di test. Le azioni associate all'istruzione condizionale vengono eseguite in base al valore dell'espressione (trUE oppure FALSE). Quindi l'operatore ? può essere utilizzato per sostituire un'istruzione if-else. La sintassi di un'istruzione condizionale è:
espressione_test ? azione_true : azione_false;
L'operatore ? viene anche denominato operatore ternario in quanto richiede tre operandi. Si osservi l'istruzione seguente:
bool positivo;
if(valore >= 0.0)
{
positivo = true;
}
else
{
positivo = false;
}
Ecco come si può riscrivere la stessa sequenza di istruzioni con l'operatore condizionale:
bool positivo;
positivo = (valore>=0.0) ? true : false;
IL CICLO FOR
Il linguaggio C++ è dotato di tutte le istruzioni di controllo ripetitive presenti negli altri linguaggi: cicli for, while e do-while. La differenza fondamentale fra un ciclo for e un ciclo while o do-while consiste nella definizione del numero delle ripetizioni. Normalmente, i cicli for vengono utilizzati quando il numero delle operazioni richieste è ben definito mentre i cicli while e do-while vengono utilizzati quando invece il numero delle ripetizioni non è noto a priori.
Il ciclo for
Il ciclo for ha la seguente sintassi:
for(valore_iniziale, condizione_di_test, incremento)
{
(

Esempio