Il costrutto struct
Una struct (abbreviazione di structure) è una struttura dati composta:
permette di raggruppare più variabili di tipi diversi sotto un unico nome, così da trattarle come un’unica entità.
Può essere utile, ad esempio, per rappresentare un concetto reale (come uno studente, un punto, una data) mettendo insieme dati diversi ma logicamente collegati.
Dichiarazione di una struct
La sintassi base è:
struct NomeStruttura {
tipo campo1;
tipo campo2;
// ...
};
Esempio:
struct Studente {
string nome;
int eta;
float media;
};
La dichiarazione definisce solo un “modello”, non crea ancora variabili.
Creazione e valorizzazione di variabili struct
Per creare una variabile di tipo Studente:
Studente s;
s.nome = "Anna";
s.eta = 17;
s.media = 8.5;
Oppure si può inizializzare direttamente:
Studente s{"Anna", 17, 8.5};
I campi si accedono con l’operatore .:
cout << s.nome << " ha " << s.eta << " anni." << endl;
Passare struct a funzioni
Le struct si possono passare a funzioni come qualunque altro tipo:
void stampaStudente(Studente s) {
cout << s.nome << " (" << s.eta << " anni) - media: " << s.media << endl;
}
int main() {
Studente a{"Luca", 18, 7.9};
stampaStudente(a);
return 0;
}
Perchè utilizzare il costrutto struct
- Chiarezza: i dati correlati stanno insieme
- Modularità: possiamo ragionare su blocchi separati
- Riuso: possiamo creare tante variabili di quel tipo senza riscrivere nulla
- Manutenibilità: se devo aggiungere un campo, lo aggiungo nella struct e tutto il resto resta coerente
Spoiler: le struct possono avere anche funzioni
In C++ le struct non servono solo a raccogliere dati: possono anche contenere funzioni al loro interno.
Questo è un primo passo verso la programmazione a oggetti, dove dati e operazioni stanno insieme nella stessa entità logica.
Esempio semplice:
#include <iostream>
using namespace std;
struct Punto {
int x;
int y;
void stampa() {
cout << "(" << x << ", " << y << ")" << endl;
}
};
int main() {
Punto p{3, 4};
p.stampa(); // chiama la funzione interna alla struct
return 0;
}
In questo esempio, la struct Punto non contiene solo i dati x e y, ma anche una funzione membro stampa() che sa come mostrare quei dati.
Ricapitoliamo
- Motivazioni: perchè utilizzare la struttura struct?
- Concetto: raggruppare più dati correlati sotto un unico nome.
- Differenza tra una struct e una variabile di tipo struct
- Dichiarazione di una struct e successiva valorizzazione
Domande guida
- Perché è utile usare una struct invece di tante variabili separate?
- Come si dichiara una struct e come si valorizzano i suoi campi?
- Come posso creare un array di struct e accedere ai singoli campi?
- Come passo una struct o un array di struct a una funzione per leggerla o modificarla?