-
Introduzione
Obiettivi e Prerequisiti
Contenuto generale del
Corso
Nota storica
-
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