-
Caratteristiche generali del linguaggio
"Case sensitivity"
Moduli funzione
Entry-point del programma: la funzione main
Le tre parti di una funzione
Aree di commento
Primo programma di esempio (con tabella esplicativa di ogni simbolo usato)
-
Cominciamo dalla funzione printf
Perché una funzione di I/O del C ?
Operazioni della funzione printf
Argomenti della funzione printf
Scrittura della control string sullo schermo
Definizione di sequenza di escape
Principali sequenze di escape
La funzione printf con più argomenti
Definizione di specificatore di formato
Principali specificatori di formato in free-format
Specificatori di formato con ampiezza di campo e precisione
Altri campi degli specificatori di formato
-
Tipi, Variabili, Costanti
Tipi delle variabili
Tipi intrinseci del linguaggio
Dichiarazione e definizione degli identificatori
Qualificatori e specificatori di tipo
Tabella di occupazione della memoria dei vari tipi di dati
L'operatore sizeof
Il tipo "booleano"
Definizione con Inizializzazione
Le Costanti in C++
Specificatore const
-
Visibilità
e tempo di vita
Visibilità di una variabile
Tempo di vita di una variabile
Visibilità globale
-
Operatori e operandi
Definizione di operatore e regole generali
Operatore di assegnazione
Operatori matematici
Operatori a livello del bit
Operatori binari in notazione compatta
Operatori relazionali
Operatori logici
Operatori di incremento e decremento
Operatore condizionale
Conversioni di tipo
Precedenza fra operatori (tabella)
Ordine di valutazione
-
Introduzione all'I/O sui dispositivi standard
Dispositivi standard di I/O
Oggetti globali di I/O
Operatori di flusso di I/O
Output tramite l'operatore di inserimento
Input tramite l'operatore di estrazione
Memorizzazione dei dati introdotti da tastiera
Comportamento in caso di errore in lettura
-
Il Compilatore GNU gcc in ambiente Linux
Un compilatore integrato C/C++
Il progetto GNU
Quale versione di gcc sto usando?
I passi della compilazione
Estensioni
L'input/output di gcc
Il valore restituito al sistema
Passaggi intermedi di compilazione
I messaggi del compilatore
Controlliamo i livelli di warning
Compilare per effetture il debug
Autopsia di un programma defunto
Ottimizzazione
Compilazione di un programma modulare
Inclusione di librerie in fase di compilazione
-
Il Comando 'make' in ambiente Linux
Perche' utilizzare il comando make?
Il Makefile ed i target del make
Dipendenze
Macro e variabili ambiente
Compiliamo con make
Alcuni target standard
-
Istruzioni di controllo
Istruzione di controllo if
Istruzione di controllo while
Istruzione di controllo do ... while
Istruzione di controllo for
Istruzioni continue, break e goto
Istruzione di controllo switch ... case
-
Array
Cos'è un array ?
Definizione e inizializzazione di un array
L'operatore [ ]
Array multidimensionali
L'operatore sizeof e gli array
Gli array in C++
-
Stringhe di caratteri
Le stringhe come particolari array di caratteri
Definizione di variabili stringa
Inizializzazione di variabili stringa
Funzioni di libreria gets e puts
Conversioni fra stringhe e numeri
Le stringhe in C++
-
Funzioni
Definizione di una funzione
Dichiarazione di una funzione
Istruzione return
Comunicazioni fra programma chiamante e funzione
Argomenti di default
Funzioni con overload
Funzioni inline
Trasmissione dei parametri tramite l'area stack
Ricorsività delle funzioni
Funzioni con numero variabile di argomenti
Cenni sulla Run Time Library
-
Riferimenti
Costruzione di una variabile mediante copia
Cosa sono i riferimenti ?
Comunicazione per "riferimento" fra programma e funzione
-
Direttive al Preprocessore
Cos'é il preprocessore ?
Direttiva #include
Direttiva #define di una costante
Confronto fra la direttiva #define e lo specificatore const
Direttiva #define di una macro
Confronto fra la direttiva #define e lo specificatore inline
Direttive condizionali
Direttiva #undef
-
Sviluppo delle applicazioni in ambiente Windows
Definizioni di IDE e di "progetto"
Gestione di files e progetti
Editor di testo
Gestione delle finestre
Costruzione dell'applicazione eseguibile
Debug del programma
Utilizzo dell'help in linea
-
Indirizzi e Puntatori
Operatore di indirizzo
&
Cosa sono i puntatori ?
Dichiarazione di una variabile di tipo puntatore
Assegnazione di un valore a un puntatore
Aritmetica dei puntatori
Operatore di dereferenziazione *
Puntatori a void
Errori di dangling references
Funzioni con argomenti puntatori
-
Puntatori ed Array
Analogia fra puntatori ed array
Combinazione fra operazioni di deref. e di incremento
Confronto fra operatore [ ] e deref. del puntatore "offsettato"
Funzioni con argomenti
array
Funzioni con argomenti puntatori passati by reference
Array di puntatori
-
Elaborazione della riga di comando
Esecuzione di un programma tramite riga di comando
Argomenti passati alla funzione main
-
Puntatori e Funzioni
Funzioni che restituiscono puntatori
Puntatori a Funzione
Array di puntatori a funzione
Funzioni con argomenti puntatori a funzione
-
Puntatori e Costanti
Puntatori a costante
Puntatori costanti
Puntatori costanti a costante
Funzioni con argomenti costanti trasmessi by value
Funzioni con argomenti costanti trasmessi by reference
-
Tipi definiti dall'utente
Concetti di oggetto e istanza
Typedef
Strutture
Operatore .
Puntatori a strutture - Operatore ->
Unioni
Dichiarazione di strutture e membri di tipo struttura
Strutture di tipo bit field
Tipi enumerati
-
Allocazione dinamica della memoria
Memoria stack e memoria heap
Operatore new
Operatore delete
-
Namespace
Programmazione modulare e compilazione separata
Definizione di namespace
Risoluzione della visibilità
Membri di un namespace definiti esternamente
Namespace annidati
Namespace sinonimi
Namespace anonimi
Estendibilità della definizione di un namespace
Parola-chiave using
Precedenze e conflitti fra i nomi
Collegamento fra namespace definiti in files diversi
-
Eccezioni
Segnalazione e gestione degli errori
Il costrutto try
L'istruzione throw
Il gestore delle eccezioni: costrutto catch
Riconoscimento di un'eccezione fra diverse alternative
Blocchi innestati
Eccezioni che non sono errori
-
Classi e data hiding
Analogia fra classi e strutture
Specificatori di accesso
Data hiding
Funzioni membro
Risoluzione della visibilità
Funzioni-membro di sola lettura
Classi membro
Polimorfismo
Puntatore nascosto this
-
Membri a livello di classe e accesso "friend"
Membri di tipo enumerato
Dati-membro statici
Funzioni-membro statiche
Funzioni friend
Classi friend
-
Costruttori e distruttori degli oggetti
Costruzione e distruzione di un oggetto
Costruttori
Costruttori e conversione implicita
Distruttori
Oggetti allocati dinamicamente
Membri puntatori
Costruttori di copia
Liste di inizializzazione
Membri oggetto
Array di oggetti
Oggetti non locali
Oggetti temporanei
Utilità dei costruttori e distruttori
-
Overload degli operatori
Estendibilità del
C++
Ridefinizione degli
operatori
Metodi della classe o funzioni
esterne ?
Il ruolo del puntatore nascosto
this
Overload degli operatori di
flusso di I/O
Operatori binari e
conversioni
Operatori unari e casting
a tipo nativo
Operatori in
namespace
Oggetti-array e array
associativi
Oggetti-funzione
Puntatori
intelligenti
Operatore di
assegnazione
Ottimizzazione delle
copie
Espressioni-operazione
-
Eredita'
L'eredità in
C++
Classi base e
derivata
Accesso ai membri della classe
base
Conversioni fra classi base
e derivata
Costruzione della classe
base
Regola della
dominanza
Eredità e
overload
La dichiarazione
using
Eredità multipla e
classi basi virtuali
-
Polimorfismo
Late binding e
polimorfismo
Ambiguità dei puntatori
alla classe base
Funzioni virtuali
Tabelle delle funzioni
virtuali
Costruttori e distruttori
virtuali
Scelta fra velocità
e polimorfismo
Classi astratte
Un rudimentale sistema di
figure geometriche
Un rudimentale sistema di
visualizzazione delle figure
-
Template
Programmazione
generica
Definizione di una classe
template
Istanza di un
template
Parametri di default
Funzioni template
Differenze fra funzioni e
classi template
Template e
modularità
-
Generalità sulla
Libreria Standard del C++
Campi di
applicazione
Header files
Il namespace std
La Standard Template
Library
-
La Standard Template
Library
Generalità
Iteratori
Contenitori Standard
Algoritmi e
oggetti-funzione
-
Una classe C++ per
le stringhe
La classe string
Confronto fra string e
vector<char>
Il membro statico
npos
Costruttori e operazioni di
copia
Gestione degli
errori
Conversioni fra oggetti string
e stringhe del C
Confronti fra
stringhe
Concatenazioni e
inserimenti
Ricerca di
sotto-stringhe
Estrazione e sostituzione
di sotto-stringhe
Operazioni di input-output
-
Librerie statiche e dinamiche in Linux
Introduzione
Librerie in ambiente Linux
Un programma di prova
Librerie statiche
Come costruire una libreria statica
Link con una libreria statica
I limiti del meccanismo del link statico
Librerie condivise
Come costruire una libreria condivisa
Link con una libreria condivisa
La variabile ambiente LD_LIBRARY_PATH
La flag -rpath
Che tipo di libreria sto usando?
Un aspetto positivo dell'utilizzo delle librerie condivise
Librerie statiche vs librerie condivise
-
Le operazioni di input-ouput in C++
La gerarchia di classi stream
Operazioni di output
Operazioni di input
Stato dell'oggetto stream e gestione degli errori
Formattazione e manipolatori di formato
Cenni sulla bufferizzazione
-
Conclusioni