Corso di Fondamenti di Informatica
Introduzione alla programmazione in C++
Claudio De Stefano - Corso di Fondamenti di Informatica
2
Un’introduzione
■ Che cosa è il C++?
■ La programmazione procedurale
■ La programmazione orientata agli oggetti
■ La programmazione generica
■ Dal C al C++
Che cosa è il C++?
■ C++ è un linguaggio di programmazione general-purpose che supporta:
– la programmazione procedurale (è un C “migliore”) – la programmazione orientata agli oggetti
– la programmazione generica
■ C++ è quindi un linguaggio ibrido, nel senso che supporta più paradigmi di programmazione
Bjarne Stroustrup è il “padre” del C++, che ha cominciato a sviluppare nel 1979
Il linguaggio è stato standardizzato nel 1998
Claudio De Stefano - Corso di Fondamenti di Informatica
4
La programmazione procedurale
■ Costituisce l’approccio tradizionale alla programmazione
■ Usa come metodologia di riferimento la decomposizione funzionale, con approccio discendente (top-down)
– si scompone la funzionalità principale del sistema da sviluppare in funzionalità più semplici
– si termina la scomposizione quando le funzionalità individuate sono così semplici da permetterne una diretta implementazione come funzioni
– si divide il lavoro d’implementazione, eventualmente tra diversi programmatori, sulla base delle funzionalità individuate
La programmazione orientata agli oggetti
■ S’individuano le classi di oggetti (entità del mondo reale o concettuale) che caratterizzano il dominio applicativo
– le classi sono poi modellate, progettate e implementate
– ogni classe è descritta da un’interfaccia che specifica il comportamento degli oggetti della classe
■ L’applicazione è costruita con un approccio ascendente (bottom-up), assemblando oggetti e individuando le modalità con cui questi devono collaborare per realizzare le diverse funzionalità dell’applicazione
Claudio De Stefano - Corso di Fondamenti di Informatica
6
La programmazione generica
■ La programmazione generica consente di definire una funzione o una classe senza specificare il tipo di una o più delle sue entità (parametri, membri)
■ Esempi significativi sono:
– una funzione di ricerca in grado di operare di volta in volta su elementi di un tipo diverso
– una classe che descrive contenitori (lista, insieme, coda, …) in grado di contenere oggetti di tipi qualsiasi
■ Il principale meccanismo per ottenere genericità in C++ è quello dei template, che consentono di descrivere famiglie di funzioni o di classi parametriche
Per cominciare...
– Il programma “Hello world”
– Un’altra versione di “Hello world”
– Le parole chiave – I tipi fondamentali – Gli operatori (I parte) – Gli operatori (II parte) – Le istruzioni
– Il controllo (le selezioni) – Il controllo (le iterazioni)
– La valutazione di corto circuito delle condizioni
Claudio De Stefano - Corso di Fondamenti di Informatica
8
Il programma “Hello world”
// File: hello.cpp
#include <iostream>
using namespace std;
int main() {
cout << "Hello world" << endl;
return 0;
}
// introduce un commento che termina con la linea Si aggiunge alla forma /* … */
I programmi che usano
librerie standard dovrebbero includere using
namespace std;
prompt> hello Hello world
main deve restituire un int
Se return 0 manca è generata dal compilatore, che può segnalare un warning Lo 0 indica che tutto è andato bene
end-of-line
Standard output stream Insertion operator (put to)
Un’altra versione di “Hello world”
// File: hello2.cpp
#include <iostream>
using namespace std;
void Hello();
int main() { Hello();
return 0;
}
prompt> hello Hello world Prototipo della funzione Può essere omesso se si definisce Hello prima di main
Svuota il buffer di output
In alternativa, la sequenza
escape "\n"
Claudio De Stefano - Corso di Fondamenti di Informatica
10
Le parole chiave
■ Salvo che per alcuni dettagli, un programma C è un programma C++ legale
– ad esempio, le parole riservate del C sono un sottoinsieme di quelle del C++:
Asm default for private struct unsigned
auto delete friend protected switch using
bool do goto public template virtual
break double if register this void
case dynamic_cast inline reinterpret_cast throw volatile
catch else int return true wchar_t
char enum long short try while
class explicit mutable signed typedef
const extern namespace sizeof typeid
const_cast false new static typename
continue float operator static_cast union
I tipi fondamentali
■ Alcuni dei tipi fondamentali (primitivi) del C++:
■ Nelle assegnazioni e nelle operazioni aritmetiche, i tipi base possono essere mescolati liberamente
– C++ esegue automaticamente tutte le conversioni significative:
bool // boolean, valori possibili sono true e false char // character, per esempio, 'a', 'z', e '9'
int // integer, per esempio, 1, 42, e 1216
float // numero floating-point in singola precisione double // numero floating-point in doppia precisione
void some_function n() { double d = 2.2;
int i = 7; C++ usa un type cecking
Claudio De Stefano - Corso di Fondamenti di Informatica
12
re Nome Descrizione
:: scope resolution class::member
:: global ::name
() function call expr(expr_list)
() value construction type(expr_list)
[] subscripting pointer[expr]
. member selection object.member
-> member selection pointer–>member
++ post increment lvalue++
–– post decrement lvalue––
reinterpret_cast<type>
dynamic_cast<type>
static_cast<type>
const_cast<type>
sizeof size of object sizeof expr
sizeof size of type sizeof (type)
++ pre increment ++lvalue
–– pre decrement ––lvalue
new create/allocate new type
new[] create array new type[]
delete destroy/deallocate delete pointer
delete[] destroy array delete[] pointer
~ complement ~expr
! logical not !expr
- unary minus -expr
+ unary plus +expr
& address of &lvalue
* dereference *expr
() cast (type conversion) (type) expr
.* member selection object.*pointer-to-member
->* member selection pointer–>*pointer-to-member
Gli operatori
Le precedenze decrescono dalla I alla II parte e dall’alto verso il basso
Gli operatori nello stesso
riquadro hanno la stressa
precedenza
Simbolo di operatore Nome Descrizione
* multiply expr*expr
/ divide expr/expr
% modulo(reminder) expr%expr
+ add (plus) extr+expr
- subtract (sub) expr-expr
<< shift-left expr<<expr
>> shift right expr>>expr
< less than expr<expr
<= less than or equal expr<=expr
> greater than expr>expr
>= greater than or equal expr>=expr
== equal expr==expr
!= not equal expr!<expr
& bitwise AND expr&expr
^ bitwise exclusive OR expr^expr
| bitwise inclusive OR expr|expr
&& logical AND expr&&expr
|| logical inclusive OR expr||expr
= simple assignment lvalue=expr
*= multiply and assign lvalue*=expr
/= divide and assign lvalue/=expr
%= modulo and assign lvalue%=expr
+= add and assign lvalue+=expr
-= subtract and assign lvalue-=expr
<<= shift left and assign lvalue<<=expr