Nato nel 1983 dall'ingegno di Bjarne Stroustrup, allora ricercatore presso AT&T, C++ è tra i primi 5 linguaggi più utilizzati al mondo.
I campi di applicazione sono i più svariati: dal gaming alle applicazioni real-time, dai componenti per sistemi operativi ai software di grafica e musica, dalle app per cellulari ai sistemi per supercomputer. Praticamente, C++ è ovunque.
Negli anni si sono avvicendate diverse versioni di questo linguaggio di programmazione, introducendo via via diverse modifiche ed alcune caratteristiche che ne fanno ancora un linguaggio assolutamente importante e moderno.
Programmazione Orientata agli Oggetti
Il C++ è un linguaggio pensato per la programmazione orientata agli oggetti, che rende questo linguaggio una piattaforma ideale per realizzare progetti di grosse dimensioni, favorendo l’astrazione dei problemi.
Ciò ci consente di sviluppare software seguendo i più moderni pattern di progettazione: esistono moltissime librerie già pronte e riutilizzabili, integrabili con i progetti grazie ad opportune strategie e design pattern come Adapter o Facade.
Efficienza e versatilità
C++ mette insieme l’espressività dei linguaggi orientati agli oggetti con l’efficienza e la compattezza del linguaggio C dal quale discende e di cui eredita potenza, flessibilità e la possibilità di programmare a basso livello.
Questo ci permette di scrivere programmi di tutte le dimensioni, utilizzando ricchi stack di framework per dialogare ad alto livello, oppure lavorare a basso livello fino ad arrivare all'intergrazione di istruzioni assembly.
Portabilità
Esistono compilatori di C++ praticamente per tutte le piattaforme e sistemi operativi, e con le dovute accortezze (spesso non banali) si può pensare di ricompilare un software e farlo girare in diversi contesti applicativi. Questo grazie al fatto che C++ è definito come standard.
Va detto che in generale il compilatore crea codice destinato direttamente al sistema operativo, ma ci sono anche casi in cui il sorgente viene compilato in bytecode per girare su macchine virtuali, come accade per esempio con il Visual C++ e il runtime CLR di Microsoft. Anche in questo caso, comunque, strumenti come Mono garantiscono una certa portabilità del codice.
Equivoci: procedurale o ad oggetti?
Per molti C++, specie nei suoi primi quindici anni di vita, è stato un ponte tra i costrutti tipici dei linguaggi procedurali standard, familiari a molti programmatori che tipicamente passavano da C a C++, con il modello di programmazione orientata agli oggetti.
Questa dualità, che avrebbe dovuto essere un vantaggio, spesso si è rivelata un problema per chi, abituato ad un approccio procedurale, era portato a creare mix esplosivi di classi con centinaia di righe di codice scritte con approccio procedurale (i cosiddetti code monsters).
Oggi, grazie alla grandissima diffusione della programmazione orientata agli oggetti anche a livello accademico, sta scomparendo la tendenza ad utilizzare linguaggi e metodologie procedurali, che benché per certi versi più semplici, limitano l’uso di stratagemmi e tecniche per il mantenimento e il riuso del codice.
Struttura e contenuti di questa guida
In questa guida analizzeremo le caratteristiche del linguaggio C++ partendo dalle sue origini. Nel corso del tempo infatti, C++ ha subito profonde trasformazioni che ne hanno ampliato le potenzialità e le modalità di impiego.
Dalla sua edizione originale, lo standard di rifermento che definisce le caratteristiche del linguaggio è stato aggiornato più volte, e in conseguenza di ciò anche i compilatori sono stati adeguati al fine di aderire alle nuove specifiche, pur mantenendo piena retrocompatibilità con gli standard precedenti.
Tuttavia, molto spesso intercorre un certo lasso di tempo prima che le nuove specifiche vengano recepite e pertanto, quando si fa uso di costrutti che ricadono nelle versioni più recenti dello standard, è necessario verficare che il compilatore impiegato sia compatibile.
Per questo motivo, le prime lezioni di questa guida saranno dedicate alla creazione di un ambiente di sviluppo, per cominciare fin da subito a scrivere codice in C++, sfruttando nel modo corretto le caratteristiche più moderne ed evolute del linguaggio.
Successivamente, dopo aver passato in rassegna alcuni elementi di base, dai quali maggiormente traspare la familiarità con il linguaggio C, passeremo ai temi propri della programmazione orientata agli oggetti, introducendo il concetto di classe.
Verranno poi esaminati sia gli operatori che i costrutti di controllo di flusso che consentono di creare algoritmi di complessità arbitraria, contestualizzandone l'uso nell'ambito della programmazione a oggetti. Analizzeremo quindi il supporto alle operazioni di I/O offerto da C++ e la possibilità di integrare tale funzionalità nella definizione di classi mediante l'uso di appositi operatori.
Nell'ambito delle tecniche di scrittura di codice robusto e resiliente, verrà discusso l'uso dei qualificatori applicabili alle variabili ed ai membri di classe e contestualmente si introdurrà l'uso degli operatori di conversione.
Infine tratteremo in maniera approfondita la definizione dei template e l'uso di altri costrutti avanzati del linguaggio.
C++ è un linguaggio accessibile a programmatori con vari livelli di esperienza, dai neofiti agli esperti. Pertanto si cercherà sempre di mantenere una progressione logica tra gli argomenti trattati in una lezione e la successiva, a vantaggio di chi si accosta per la prima volta a questo linguaggio. Tuttavia, laddove è possibile, si promuoverà l'uso dei costrutti più recenti ed efficienti di modo da offrire un riferimento anche a chi vuole aggiornare la sua conoscenza del C++ con le novità introdotte negli ultimi anni.