Corso di Fondamenti di Informatica

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Corso di Fondamenti di Informatica"

Transcript

1 Corso di Fondamenti di Informatica Introduzione alla programmazione in C++ 1

2 Un introduzione Che cosa è il C++? La programmazione procedurale La programmazione orientata agli oggetti La programmazione generica Dal C al C++ 2

3 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

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 4

5 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 5

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 6

7 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 7

8 Il programma Hello world // introduce un commento che termina con la linea Si aggiunge alla forma /* */ // File: hello.cpp #include <iostream> using namespace std; int main() { cout << "Hello world" << endl; return 0; } I programmi che usano librerie standard dovrebbero includere using namespace std; prompt> hello Hello world Standard output stream Insertion operator (put to) end-of-line main deve restituire un int Se return 0 manca è generata dal compilatore, che può segnalare un warning Lo 0 indica che tutto è andato bene 8

9 Un altra versione di Hello world // File: hello2.cpp #include <iostream> using namespace std; void Hello(); int main() { Hello(); return 0; } void Hello() { cout << "Hello world" << endl; } Prototipo della funzione Può essere omesso se si definisce Hello prima di main prompt> hello Hello world Svuota il buffer di output In alternativa, la sequenza escape "\n" 9

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 10

11 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; d = d + i; i = d * i; } C++ usa un type cecking forte statico 11

12 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 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 12

13 Gli operatori (II parte) Gli operatori unari, le assegnazioni e l espressione condizionale sono associativi a destra Tutti gli altri sono associativi a sinistra 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 >>= shift right and assign lvalue>>=expr &= AND and assign lvalue&=expr = inclusive OR and assign lvalue =expr ^= exclusive OR and assign lvalue^=expr? : conditional expression expr?expr:expr throw throw exception throw expr, comma (sequencing) expr, expr 13