classi
class User {
public:
User(std::string name) : name_(std::move(name)) {}
std::string name() const { return name_; }
private:
std::string name_;
};
costruttori
usa initializer list per efficienza e chiarezza.
ereditarietà
class Actor {
public:
virtual void act() = 0;
virtual ~Actor() = default;
};
polimorfismo
usa virtual e override per behavior dinamico.
class Hero : public Actor {
public:
void act() override { /* ... */ }
};
panoramica
In questo capitolo su classi e oop moderna, costruttori, encapsulation, polimorfismo e buone pratiche. L'obiettivo è trasformare i concetti in micro-pattern riutilizzabili con esempi piccoli e verificabili.
Lavora in sequenza: leggi, prova, modifica gli snippet e annota i trade-off principali (performance, leggibilità, manutenzione).
badge: oop core
obiettivi
- capire e applicare classi in uno scenario reale
- capire e applicare costruttori in uno scenario reale
- capire e applicare ereditarietà in uno scenario reale
- capire e applicare polimorfismo in uno scenario reale
scheda rapida
#include <iostream>
#include <vector>
int main() {
std::vector<int> dati{1, 2, 3};
for (auto &v : dati) {
v *= 2;
}
for (const auto &v : dati) {
std::cout << v << " ";
}
std::cout << "\n";
return 0;
}
Adatta questo scheletro agli esempi della lezione e sostituisci i dati con il tuo dominio.
tips
- compila con warning elevati
- preferisci RAII
- usa const ovunque possibile
- usa RAII
- metti virtual sui distruttori base
- usa override
tip: Una classe che gestisce risorse deve rispettare la regola del 5/0.
mini progetto
Classe Resource con gestione file.
- costruttore apre file
- distruttore chiude
- aggiungi metodo read
- test con scope
output atteso: uno script o query ripetibile con risultati verificabili.
checklist
- ho eseguito gli snippet e controllato l'output
- ho annotato almeno 2 trade-off
- ho completato il mini progetto
- ho salvato un riepilogo personale