Corsi C++

CORSO C++

Il linguaggio di programmazione C è sviluppato dai programmatori per gli stessi programmatori.
Il C++ è l'evoluzione del linguaggio di programmazione C con l'aggiunta del supporto alla programmazione orientata agli oggetti (OOP).
C++ permette al programmatore di gestire quindi le singoli componenti del programma come oggetti, cioè come componenti intrinseche del linguaggio stesso.
Gli oggetti vengono disposti in classi ed ogni classe può ereditare oggetti da altre classi o cambiarne la visibilità all'interno del programma (es. oggetti privati, protetti e pubblici).



C++ è un linguaggio di programmazione molto versatile, usato sia per semplici programmi didattici,sia per programmare complessi sistemi operativi.
La grande ricchezza semantica del C++, insieme alle librerie che lo accompagnano, lo rende un linguaggio estremamente espressivo e potente

Obiettivi del corso

L'obiettivo del corso è quello di fornire approfondite ed esaustive conoscenze teorico-pratiche necessarie per il corretto utilizzo del C++. Il corso tratta tutti gli argomenti fondamentali per acquisire le conoscenze necessarie per lo sviluppo di applicazioni in linguaggio C++, usando la tecnica della "Programmazione orientata a Oggetti" o OOP (Object Oriented Programming").

Un linguaggio di programmazione ha due scopi principali:

1. Fornire i mezzi perchè il programmatore possa specificare le azioni da eseguire;

2. Fornire un insieme di concetti per pensare a quello che può essere fatto.

Il primo scopo richiede che il linguaggio sia vicino alla macchina; il secondo richiede che il linguaggio sia vicino al problema da risolvere, in modo che i concetti necessari per la soluzione siano esprimibili direttamente e in forma concisa. La OOP è stata appositamente pensata per questo scopo e le potenzialità aggiunte al C per creare il C++ ne costituiscono l'aspetto principale e caratterizzante.

Caratteristiche del Corso C++

Conoscenze richieste:
La conoscenza di base di qualche linguaggio di programmazione, facilità la comprensione del corso e la velocità di apprendimento.

Calendario del corso:
Le date e gli orari del corso, molto flessibili, vengono concordati dal cliente e dal docente.

Durata e Costo del corso: (Durata espandibile)
10 ore - 500€ + IVA (Corso livello Base)
30 ore - 1350€ + IVA (Corso livello Approfondito)
50 ore - 2000€ + IVA (Corso livello Intensivo)
(Le ore, e il relativo costo, sono modificabili a seconda delle esigenze e richieste dal cliente)
Al costo verrà applicato uno SCONTO del 10% fino a tempo indeterminato... Affrettatevi!

PROGRAMMA DEL CORSO<:

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


Contattaci per prenotare un corso di C++, indicandone il livello di difficoltà.