CORSO C++ STANDARD

 


 

Indice degli argomenti trattati

 

  • 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