Classi e Oggetti
Cosa sono le classi e gli oggetti?
Section titled “Cosa sono le classi e gli oggetti?”Immagina di dover gestire le informazioni di una classe scolastica con 30 studenti. Ogni studente ha un nome, un’età e dei voti.
Senza classi, avresti 30 variabili per i nomi, 30 per le età, 30 per i voti — un caos totale. Con le classi, puoi creare un “modello Studente” e poi creare 30 studenti, ognuno con i suoi dati ben organizzati.
Classe vs Oggetto: lo stampo e il prodotto
Section titled “Classe vs Oggetto: lo stampo e il prodotto”Pensa a una classe come allo stampo per fare i biscotti. Lo stampo definisce la forma — ma non è un biscotto.
Un oggetto è il biscotto vero, creato usando quello stampo. Puoi usare lo stesso stampo per fare decine di biscotti, ognuno diverso (con cioccolato, con glassa, ecc.).
- Classe = lo stampo (il progetto)
- Oggetto = il prodotto concreto (l’istanza)
Come si definisce una classe
Section titled “Come si definisce una classe”class Cane {public: string nome; // caratteristiche (dati) string razza; int eta;
void abbaia() { // azioni (funzioni) cout << nome << " dice: Bau!" << endl; }
void descrivi() { cout << nome << " è un/a " << razza << " di " << eta << " anni." << endl; }};La parola public: significa che questi dati e queste funzioni sono accessibili dall’esterno della classe.
Come si creano oggetti
Section titled “Come si creano oggetti”Una volta definita la classe, puoi creare quanti oggetti vuoi:
Cane c1; // crea un cane (oggetto vuoto)c1.nome = "Fido"; // imposta i dati con il punto .c1.razza = "Labrador";c1.eta = 3;
Cane c2;c2.nome = "Rex";c2.razza = "Pastore Tedesco";c2.eta = 5;
c1.abbaia(); // Fido dice: Bau!c2.descrivi(); // Rex è un/a Pastore Tedesco di 5 anni.Il punto . si usa per accedere sia ai dati che alle funzioni di un oggetto.
Un esempio più completo: Rettangolo
Section titled “Un esempio più completo: Rettangolo”class Rettangolo {public: double base; double altezza;
// Funzione che calcola l'area double area() { return base * altezza; }
// Funzione che calcola il perimetro double perimetro() { return 2 * (base + altezza); }};
int main() { Rettangolo r; // crea un rettangolo r.base = 5.0; // imposta i dati r.altezza = 3.0;
cout << "Area: " << r.area() << endl; // 15 cout << "Perimetro: " << r.perimetro() << endl; // 16
return 0;}La cosa bella è che area() usa automaticamente base e altezza dell’oggetto su cui viene chiamata. Non devi passarle come parametri.
Differenza tra class e struct
Section titled “Differenza tra class e struct”In C++, class e struct sono quasi identiche. L’unica differenza:
- In
structtutto è pubblico per default (accessibile dall’esterno) - In
classtutto è privato per default (non accessibile dall’esterno)
In pratica, si usa struct per semplici raggruppamenti di dati, e class per oggetti più complessi con logica interna.
Passare oggetti alle funzioni
Section titled “Passare oggetti alle funzioni”Puoi passare un oggetto a una funzione come qualsiasi altra variabile. Per evitare di copiarlo, usa const &:
// Legge i dati del cane senza modificarlivoid stampaInfoCane(const Cane& c) { cout << "Nome: " << c.nome << endl; cout << "Razza: " << c.razza << endl; cout << "Eta: " << c.eta << " anni" << endl;}
int main() { Cane fido; fido.nome = "Fido"; fido.razza = "Labrador"; fido.eta = 3;
stampaInfoCane(fido); // passa il cane alla funzione return 0;}Esempio pratico: classe Studente
Section titled “Esempio pratico: classe Studente”#include <iostream>#include <string>#include <vector>using namespace std;
class Studente {public: string nome; vector<int> voti; // lista di voti
// Aggiunge un voto alla lista void aggiungiVoto(int voto) { voti.push_back(voto); }
// Calcola la media dei voti double calcolaMedia() { if (voti.empty()) return 0.0; int somma = 0; for (int v : voti) { somma += v; } return (double)somma / voti.size(); }
// Stampa la scheda completa dello studente void stampaScheda() { cout << "Studente: " << nome << endl; cout << "Voti: "; for (int v : voti) { cout << v << " "; } cout << endl; cout << "Media: " << calcolaMedia() << endl; }};
int main() { Studente alice; alice.nome = "Alice"; alice.aggiungiVoto(8); alice.aggiungiVoto(9); alice.aggiungiVoto(7); alice.aggiungiVoto(10);
alice.stampaScheda();
return 0;}Output:
Studente: AliceVoti: 8 9 7 10Media: 8.5