Dal C al C++: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Riga 156:
Questa riga distrugge dalla memoria l'oggetto il cui indirizzo si trova nel puntatore "pc2".
Corrisponde alla funzione "free" della libreria standard del linguaggio C, ma è applicabile solo a indirizzi resi da chiamate a "new".
 
== Le classi e gli oggetti ==
Consideriamo la seguente porzione di codice in linguaggio C:
struct S1 {
int i;
double x;
};
struct S1 a1 = { 2, 3.14 };
Le prima quattro righe definiscono un nuovo ''tipo'' definito dall'utente, chiamato "struct S1".
L'ultima riga definisce una variabile, chiamata "a1", di tipo "struct S1".
 
Nel linguaggio C++ la possibilità di definire nuovi tipi è stata estesa con l'aggiunta delle "funzioni membro".
Consideriamo la seguente porzione di codice in linguaggio C++:
struct S2 {
int i;
double x;
double f() { return x * 2; }
};
struct S2 a2 = { 2, 3.14 };
Rispetto al codice precedente è stato aggiunta solo la quarta riga, in cui si definisce una funzione di nome "f", che non prende parametri e che rende un valore di tipo "double".
Tale funzione è stata definita all'interno della struttura "struct S2".
Così come le variabili definite all'interno di una struttura sono dette essere i suoi membri, così le funzioni definite all'interno di una struttura sono dette essere le sue ''funzioni membro''.
Per distinguerle dalle funzioni membro, le variabili sono dette ''variabili membro''.
Si noti che "f" non è un puntatore a funzione, è proprio una funzione, con tanto di corpo.
Forse qualcuno si chiederà: "Ma allora la struttura contiene il codice macchina della funzione o solo il suo indirizzo?".
La risposta è che non contiene nessuno dei due.
La variabile "a2" ha la stessa dimensione e lo stesso contenuto della variabile "a1".
La funzione "f" è invece memorizzata nel segmento di codice del programma (quindi ben lontano dalla variabile a2), ha il contenuto che avrebbe se fosse stata generata dal seguente codice in linguaggio C:
double S2_f(const struct S2 * this) { return this->x * 2; }
 
{{wikipedia|titolopedia=C plus plus|titolobooks=il linguaggio C++}}