Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


LINGUAGGIO C++ programmazione, Sintesi del corso di Informatica

è un tutorial semplificativo per imparare le basi per una sucessiva e efficiente programmazione in c++

Tipologia: Sintesi del corso

2019/2020
In offerta
30 Punti
Discount

Offerta a tempo limitato


Caricato il 15/03/2020

nicola-celentano
nicola-celentano 🇮🇹

1

(1)

8 documenti

1 / 318

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Il linguaggio C++
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64
Discount

In offerta

Anteprima parziale del testo

Scarica LINGUAGGIO C++ programmazione e più Sintesi del corso in PDF di Informatica solo su Docsity!

Il linguaggio C++

Introduzione

1

Obiettivo

introdurre alla programmazione in C++, spiegando sintassi e semantica dei

suoi costrutti anche con l'ausilio di opportuni esempi. Verranno inizialmente

trattati gli aspetti basilari del linguaggio (tipi, dichiarazioni di variabili,

funzioni,...), per poi passare all'esame degli aspetti peculiari del linguaggio

(classi, template, eccezioni...); alla fine analizzeremo (almeno in parte)

l'input/output tramite stream e la libreria standard del linguaggio.

0

Elementi di base

1

Elementi lessicali

Ogni programma scritto in un qualsiasi linguaggio di programmazione prima di essere eseguito viene sottoposto ad un processo di compilazione o interpretazione (a seconda che si usi un compilatore o un interprete). Lo scopo di questo processo equello di tradurre il programma originale (codice sorgente) in uno semanticamente equivalente, ma eseguibile su una certa macchina. Il processo di compilazione e suddiviso in piu` fasi, ciascuna delle quali volta all'acquisizione di opportune informazioni necessarie alla fase successiva.

La prima di queste fasi e` nota come analisi lessicale ed ha il compito di riconoscere gli elementi costitutivi del linguaggio sorgente, individuandone anche la categoria lessicale. Ogni linguaggio prevede un certo numero di categorie lessicali e in C++ possiamo distinguere in particolare le seguenti categorie:

Commenti;

Identificatori;

Parole riservate;

Costanti letterali; Segni di punteggiatura e operatori;

2

Commenti

I commenti, come in qualsiasi altro linguaggio, hanno valore soltanto per il programmatore e vengono ignorati dal compilatore. E` possibile inserirli nel proprio codice in due modi diversi:

secondo lo stile C ovvero racchiudendoli tra i simboli /* e */

facendoli precedere dal simbolo //

Nel primo caso econsiderato commento tutto quello che e compreso tra /* e */, il commento quindi si puoestendere anche su piu righe o trovarsi in mezzo al codice:

void Func() { ... int a = 5; /* questo eun commento diviso su piu righe / a = 4 / commento */ + 5; ... }

3

Commenti

Nel secondo caso, proprio del C++, einvece considerato commento tutto cio che segue // fino alla fine della linea, ne consegue che non epossibile inserirlo in mezzo al codice o dividerlo su piu righe (a meno che anche l'altra riga non cominci con //):

void Func() { ... int a = 5; // questo eun commento valido a = 4 // Errore! il "+ 5;" e commento + 5; e non epossibile dividerlo su piu righe ... }

6

Identificatori

In effetti potremmo considerare una sesta categoria di identificatori, gli identificatori di macro; una macro e` sostanzialmente un alias per un frammento di codice. Le macro comunque, come vedremo in seguito, non sono trattate dal compilatore ma da un preprocessore che si occupa di eseguire alcune elaborazioni sul codice sorgente prima che questo venga effettivamente sottoposto a compilazione.

Un identificatore deve iniziare con una lettera o con carattere di underscore (_) che possono essere seguiti da un numero qualsiasi di lettere, cifre o underscore; viene fatta distinzione tra lettere maiuscole e lettere minuscole. Tutti gli identificatori presenti in un programma devono essere diversi tra loro, indipendentemente dalla categoria cui appartengono.

Benché il linguaggio non preveda un limite alla lunghezza massima di un identificatore, e` praticamente impossibile non imporre un limite al numero di caratteri considerati significativi, per cui ogni compilatore distingue gli identificatori in base a un certo numero di caratteri iniziali tralasciando i restanti; il numero di caratteri considerati significativi varia comunque da sistema a sistema.

7

Parole riservate

Ogni linguaggio si riserva delle parole chiave (keywords) il cui significato e` prestabilito e che non possono essere utilizzate dal programmatore come identificatori. Il C++ non fa eccezione:

asm auto bool break case catch char class const continue const_cast default delete do double dynamic_cast else enum explicit extern false float for friend goto if inline int long mutable namespace new operator private protected public register reinterpret_cast return short signed sizeof static static_cast struct switch template this trow true try typedef typeid typename union unsigned using virtual void volatile wchar_t while

Sono inoltre considerate parole chiave tutte quelle che iniziano con un doppio underscore ; esse sono riservate per le implementazioni del linguaggio e per le librerie standard, e il loro uso da parte del programmatore dovrebbe essere evitato in quanto non sono portabili.

8

Costanti letterali

All'interno delle espressioni e` possibile inserire direttamente dei valori, questi valori sono detti costanti letterali. La generica costante letterale può essere:

un carattere racchiuso tra apice singolo,

una stringa racchiusa tra doppi apici,

un intero

un numero in virgola mobile.

'a' // Costante di tipo carattere "a" // Stringa di un carattere "abc" // Ancora una stringa

9

Costanti letterali

Un intero può essere:

Una sequenza di cifre decimali, eventualmente con segno;

Uno 0 (zero) seguito da un intero in ottale (base 8);

0x o 0X seguito da un intero in esadecimale (base 16);

Nella rappresentazione in esadecimale, oltre alle cifre decimali, e` consentito

l'uso delle lettere da "A" a "F" e da "a" a "f".

Si noti che un segno puo` essere espresso solo in base 10, negli altri casi esso

e` sempre +:

+45 // Costante intera in base 10, 055 // in base 8 0x2D // ed in base 16

12

Costanti letterali

Un valore in virgola mobile e` costituito da:

Intero decimale, opzionalmente con segno;

Punto decimale

Frazione decimale;

e o E e un intero decimale con segno;

L'uso della lettera E indica il ricorso alla notazione scientifica.

Epossibile omettere uno tra l'intero decimale e la frazione decimale, ma non entrambi. E possibile omettere uno tra il punto decimale e la lettera E (o e) e

l'intero decimale con segno, ma non entrambi.

13

Costanti letterali

Il tipo scelto per rappresentare una costante in virgola mobile e` double, se

non diversamente specificato utilizzando i suffissi F o f per float, o L o l per long

double. Esempi:

.0 // 0 in virgola mobile 110E+4 // 110 * 10000 .14e-2 // 0. -3.5e+3 // -3500. 3.5f // forza float 3.4L // forza long double

14

Segni di punteggiatura e operatori

Alcuni simboli sono utilizzati dal C++ per separare i vari elementi sintattici o lessicali di un programma o come operatori per costruire e manipolare espressioni:

[ ] ( ) { } + - * %! ^ &

= ~ | \ ; ' : " < >? ,.

Anche le seguenti combinazioni di simboli sono operatori:

|| += -= *= <<= /= %= &= ^= |= :: >>=

15

Assegnamento

Il C++ e` un linguaggio pesantemente basato sul paradigma imperativo, questo

vuol dire che un programma C++ e` sostanzialmente una sequenza di

assegnamenti di valori a variabili. E` quindi naturale iniziare parlando proprio

dell'assegnamento.

L'operatore di assegnamento e` denotato dal simbolo = (uguale) e viene

applicato con la sintassi:

< lvalue > = < rvalue >;

Il termine lvalue indica una qualsiasi espressione che riferisca ad una regione di memoria (in generale un identificatore di variabile), mentre un rvalue e` una

qualsiasi espressione la cui valutazione produca un valore.

18

Assegnamento

Poicheun assegnamento produce come risultato il valore prodotto dalla valutazione della parte destra (e cioea sua volta una espressione), e possibile legare in cascata piu` assegnamenti:

Clarabella = Pippo = 5;

Essendo l'operatore di assegnamento associativo a destra, l'esempio visto sopra e` da interpretare come

Clarabella = (Pippo = 5);

cioe` viene prima assegnato 5 alla variabile Pippo e il risultato di tale assegnamento (il valore 5) viene poi assegnato alla variabile Clarabella.

19

Assegnamento

Esistono anche altri operatori che hanno come effetto collaterale

l'assegnazione di un valore, la maggior parte di essi sono comunque delle utili

abbreviazioni, eccone alcuni esempi:

Pippo += 5; // equivale a Pippo = Pippo + 5; Pippo -= 10; // equivale a Pippo = Pippo - 10; Pippo *= 3; // equivale a Pippo = Pippo * 3;

si tratta cioe` di operatori derivanti dalla concatenazione dell'operatore di

assegnamento con un altro operatore binario.

L'uso di queste forme sintetiche e' da preferire per due ragioni:

  1. maggiore chiarezza del codice

  2. maggiore efficienza

20

Operatori di

incremento/decremento

Gli altri operatori che hanno come effetto collaterale l'assegnamento sono quelli di autoincremento e autodecremento, ecco come possono essere utilizzati:

Pippo++; // cioe` Pippo += 1; ++Pippo; // sempre Pippo += 1; Pippo--; // Pippo -= 1; --Pippo; // Pippo -= 1;

Questi due operatori possono essere utilizzati sia in forma prefissa (righe 2 e 4) che in forma postfissa (righe 1 e 3); il risultato comunque non eproprio identico poiche la forma postfissa restituisce come risultato il valore della variabile e poi incrementa tale valore e lo assegna alla variabile, la forma prefissa invece prima modifica il valore associato alla variabile e poi restituisce tale valore:

21

Operatori di

incremento/decremento

Clarabella = ++Pippo;

/* equivale a */

Pippo++; Clarabella = Pippo;

/* invece */

Clarabella = Pippo++;

/* equivale a */

Clarabella = Pippo; Pippo++;

24

Altri operatori

& Indirizzo

  • Indirezione (puntatori)W sizeof (dimensione in byte dell'operando)W new (C++ allocazione dinamica di memoria)W delete (C++ deallocazione di memoria)W (tipo) Casting
  1. Moltiplicativi S -> D * Moltiplicazione / Divisione % Resto (modulo)W
  2. Accesso ai membri S -> D .* C++ dereferenza ->* C++ dereferenza
  3. Additivi S -> D + Somma
    • Sottrazione 6 Shift S -> D << Shift sinistro

25

Altri operatori

Shift destro

  1. Relazionali S -> D < Minore

<= Minore od uguale

Maggiore = Maggiore od uguale

  1. Eguaglianza S -> D == Uguale != Diverso
  2. Op. bit a bit S -> D & AND tra bit
  3. Op. bit a bit S -> D ^ XOR tra bit
  4. Op. bit a bit S -> D | OR tra bit
    • Op. logico S -> D && AND logico
    • Op. logico S -> D || OR logico (per 12 e 13, la valutazione si blocco non appena si determina la verità o la falsità dell'intera espressione)W
    • Condizionali S <- D ?: (a? x : y significa "if a then x else y")W

26

Altri operatori

  1. Assegnamento S <- D = Assegnamento

*= Assegna prodotto /= Assegna quoziente ( esp1 op= esp2 ) <=> %= Assegna resto (modulo)W (esp1 = esp1 op esp2) += Assegna somma -= Assegna differenza &= Assegna AND tra bit ^= Assegna XOR tra bit |= Assegna OR tra bit <<= Assegna shift sinistro

= Assegna shift destro

    • Virgola S -> D , Valuta

27

Altri operatori

L'ordine di valutazione delle sottoespressioni che compongono una espressione piugrande non e definito, ad esempio nell'espressione

Pippo = 10 * 13 + 7 * 25;

non si sa quale tra 1013 e 725 verravalutata per prima (si noti che comunque verranno rispettate le regole di precedenza e associativita).

Gli operatori di assegnamento e quelli di (auto)incremento e (auto)decremento sono gia` stati descritti, esamineremo ora l'operatore per le espressioni condizionali.

L'operatore? : e` l'unico operatore ternario: