Dal C al C++/Utilizzo basilare di librerie/L'uso di classi e oggetti: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Bot: Aggiungo: "{{Avanzamento|75%}} " |
Nessun oggetto della modifica |
||
Riga 4:
Si consideri la seguente porzione di codice in linguaggio C:
struct S1 {▼
<source lang=c>
int i;▼
double x;▼
double x;
}; struct S1 a1 = { 2, 3.14 }; </source>
Le prime quattro righe definiscono un nuovo ''tipo'', chiamato "struct S1".▼
L'ultima riga definisce una variabile, di nome "a1", di tipo "struct S1", e inizializzata con i due valori "2" e "3.14".▼
▲L'ultima riga definisce una variabile, di nome
Nel linguaggio C++ la possibilità di definire nuovi tipi è stata estesa con l'aggiunta delle "funzioni membro".
Si consideri la seguente porzione di codice in linguaggio C++:
struct S2 {▼
double f() { return x * 2; }▼
struct S2 a2 = { 2, 3.14 };▼
Rispetto al codice precedente, è stata 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".▼
<source lang=cpp>
Così come le variabili definite all'interno di una struttura sono dette essere le sue ''variabili membro'', così le funzioni definite all'interno di una struttura sono dette essere le sue ''funzioni membro''.▼
};
</source>
▲Rispetto al codice precedente, è stata aggiunta solo la quarta riga, in cui si definisce una funzione di nome
▲Così come le variabili definite all'interno di una struttura, oltre ad essere dette i ''campi'' della struttura, sono anche dette essere le sue ''variabili membro'', così le funzioni definite all'interno di una struttura sono dette essere le sue ''funzioni membro''.
In generale, variabili membro e funzioni membro sono i ''membri'' di una struttura.
Si noti che
Forse qualcuno si chiederà: "Ma allora la struttura
La risposta è che non contiene nessuno dei due.
Quando il compilatore elabora la definizione di <code>struct S2</code> non alloca spazio di dati, in quanto si tratta solo di un tipo.
La funzione "f" è memorizzata nel segmento di codice del programma, quindi ben lontano dalla variabile "a2" e da ogni altra istanza del tipo "struct S2".▼
Quando invece elabora la definizione di <code>a2</code> alloca una struttura contenente i due soli membri dato.
▲La compilazione della funzione
<source lang=c>
</source>
Il nome della funzione
▲A fronte di una tale dichiarazione di funzione, il compilatore genera pressapoco lo stesso codice che genererebbe quando compilasse il seguente codice in linguaggio C:
▲ double S2_f(const struct S2 * t) { return t->x * 2; }
▲Il nome della funzione "S2_f" indica semplicemente che tale funzione è distinta da eventuali altre funzioni di nome "f" dichiarate fuori dalla struttura.
Il parametro
La variabile
La variabile "a2" ha la stessa dimensione e lo stesso contenuto della variabile "a1".
|