Dal C al C++: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Nessun oggetto della modifica
Riga 1:
Il '''C++''' nasce all'inizio degli [[w:anni '80|anni '80]], ma si diffonde nell'industria solo negli [[w:anni '90|anni '90]]: si tratta della più diffusa estensione del [[linguaggio C]], con l'aggiunta di numerose caratteristiche per consentire la programmazione orientata agli oggetti, la programmazione generica e la metaprogrammazione. Questi tre paradigmi di programmazione si uniscono alla programmazione procedurale propria del C, per formare un linguaggio multi-paradigma.
 
== DestinatariI destinatari del libro ==
 
Siccome il linguaggio C++ deriva dal linguaggio C, di cui è sostanzialmente un soprainsieme, alcuni autori ritengono utile imparare prima il linguaggio C, anche se lo scopo finale è solamente l'apprendimento del linguaggio C++.
Altri autori non sono d'accordo, cioè ritengono preferibile imparare direttamente il linguaggio C++, senza perdere tempo e rischiare di confondersi le idee con l'apprendimento di un altro linguaggio.
Line 14 ⟶ 15:
* È comunque consigliabile studiare il linguaggio C, sia perché ha una grande importanza storica, sia perché è tuttora molto usato.
 
== CaratteristicheLe fondamentalicaratteristiche principali del C++ ==
 
Le caratteristiche più importanti che il C++ aggiunge al C sono le seguenti:
* Classi, con funzioni virtuali ed ereditarietà multipla
Line 158 ⟶ 160:
 
== Le classi e gli oggetti ==
 
Consideriamo la seguente porzione di codice in linguaggio C:
struct S1 {
Line 256 ⟶ 259:
 
== Le variabili riferimento ==
 
Nel linguaggio C, si possono definire variabili che non sono puntatori, come in "int a;", oppure variabili che sono puntatori a oggetti che non sono puntatori, come in "int * a;", oppure variabili che sono puntatori a oggetti che sono puntatori a oggetti che non sono puntatori, come in "int ** a;", e così via.
 
Line 344 ⟶ 348:
 
== Il modificatore "const" ==
 
In C++ esiste la parola-chiave "const" (abbreviazione di "constant", cioè "costante"), che serve a modificare la dichiarazione di variabili e funzioni.
Ecco alcuni esempi di utilizzo:
Line 395 ⟶ 400:
 
== L'uso dei template ==
 
In C++ si possono definire non solo classi e funzioni, ma anche template di classe e template di funzione.
 
Line 573 ⟶ 579:
#include <cstdio>
#include <cmath>
 
== L'allocazione e l'inizializzazione degli oggetti ==
 
Nel linguaggio C, si possono allocare oggetti nei seguenti modi:
* Definendo variabili statiche, che sono quelle definite con il qualificatore "static" o definite all'esterno da qualunque funzione. Tali oggetti sono creati prima che inizi la funzione "main", e sono deallocati dopo che il main è terminato.
* Chiamando una funzione che richiede dei parametri. Per ogni parametro, viene allocato un oggetto sullo stack all'atto della chiamata di funzione; tale oggetto viene deallocato quando la funzione termina.
* Facendo entrare il flusso di controllo del programma in un blocco delimitato da parentesi graffe, che può essere un'intera funzione o una sua parte, all'inizio della quale sono definite delle variabili locali non precedute dal qualificatore "static". Per ogni variabile locale, viene allocato un oggetto sullo stack all'atto dell'entrata nel blocco; tale oggetto viene deallocato quando il controllo esce dal blocco.
* Implicitamente, all'interno di espressioni. Tali oggetti temporanei vengono creati durante la valutazione dell'espressione e distrutti quando è finita la valutazione dell'intera espressione.
* Quando si chiama la funzione di libreria "malloc". Tale funzione alloca un array di caratteri. Tale array viene deallocato chiamando la funzione di libreria "free".
 
Si noti che non occorre fare discorsi particolari per strutture e array, in quanto tali oggetti composti sono comunque allocati in uno dei suddetti casi.
 
In C++, vale tutto quanto detto sopra, ma con le seguenti aggiunte.
 
All'interno di un blocco racchiuso tra parentesi graffe, è possibile definire variabili locali non solo all'inizio del blocco, ma in qualunque punto si possa inserire un'istruzione.
La variabile potrà essere utilizzata solo dopo il punto in cui è stata definita, fino alla chiusa del blocco più interno nel quale è stata definita.
Vediamo un esempio:
void f() {
int a;
a = 0;
int b; // Valido
b = 0;
c = 0; // Illegale, perché precede la definizione
int c;
{
int d;
d = 0;
static int e;
}
d = 0; // Illegale, qui "d" è già stata deallocata
e = 0; // Illegale, qui "e" esiste ancora, ma non è più accessibile
}
 
All'interno di una struttura o di una classe, è possibile usare il qualificatore "static" per una variabile membro.
Per esempio:
#include <iostream>
using namespace std;
struct C {
int a;
static int b;
};
int C::b;
int main() {
C c1;
c1.a = 1;
c1.b = 2;
C c2;
c2.a = 3;
c2.b = 4;
cout << c1.a << " " << c1.b << " " << c2.a << " " << c2.b;
}
 
Questo programma non stampa "1 2 3 4", come avrebbe fatto se la variabile membro "b" non fosse stata statica.
Stampa invece "1 4 3 4", perché dopo che la variabile membro "b" ha ricevuto il valore "2" come membro della struttura "c1", riceve il valore "4" come membro della struttura "c2".
 
Dichiarare statica una variabile membro di una struttura o classe significa dichiarare una variabile che viene istanziata una sola volta prima che sia chiamata la funzione "main", qualunque sia il numero di oggetti che verranno creati in esecuzione (anche nessuno).
 
== I contenitori standard ==
 
== I canali di ingresso/uscita ==
 
== Le stringhe ==
 
{{wikipedia|titolopedia=C plus plus|titolobooks=il linguaggio C++}}