Quando si lavora con la programmazione orientata agli oggetti (OOP) in C++, gli errori di compilazione possono essere frustranti, ma sono un’ottima occasione di apprendimento. Ecco una raccolta di esercizi che ti aiuteranno a sviluppare una comprensione più profonda della OOP e a migliorare le tue capacità di debug, con il supporto del compilatore online WeTambara. Ogni esercizio ti invita a identificare e correggere errori, rafforzando al contempo i concetti chiave di visibilità, invocazione di metodi, costruttori e relazioni tra classi.

  1. Gestione di una lampadina con la classe Lampadina
    Questo esercizio introduce lo studente alla gestione di uno stato interno di un oggetto tramite l’uso di metodi pubblici. La classe Lampadina rappresenta un dispositivo con due stati possibili: accesa o spenta. Attraverso un semplice programma interattivo, l’utente può accendere o spegnere la lampadina e verificare il suo stato attuale.
    Obiettivi didattici:
    Comprendere la dichiarazione e l’utilizzo di una classe con attributi privati.
    Apprendere il concetto di incapsulamento tramite l’uso di metodi pubblici per interagire con i dati privati.
    Implementare una logica interattiva nel main per modificare lo stato di un oggetto.
    Errore da individuare e correggere:
    Nel main, i metodi accendi e spegni vengono chiamati senza parentesi (ad esempio, lampadina.accendi anziché lampadina.accendi()). Questo genera un errore di compilazione perché in C++ è necessario includere le parentesi anche per chiamare metodi senza parametri. Inoltre, l’accesso al metodo stato è privo delle parentesi nella condizione if(lampadina.stato); dovrebbe invece essere if(lampadina.stato()).
  2. Monitor di temperatura
    L’esercizio richiede la creazione di una classe MonitorTemperatura per monitorare una temperatura e determinare se essa è sotto zero. Lo studente deve correggere gli errori del codice e implementare i metodi necessari per rendere il programma funzionale.
    Obiettivi didattici:
    Implementare e gestire un costruttore per inizializzare l’attributo di una classe.
    Dichiarare e definire un metodo per calcolare un valore basato su una condizione specifica.
    Familiarizzare con l’uso di metodi della classe per restituire risultati logici.
    Errore da individuare e correggere
    La classe MonitorTemperatura non è completa: manca il punto e virgola alla fine della dichiarazione della classe, e il costruttore non è stato definito. Inoltre, il metodo getSottozero non è dichiarato né implementato. Lo studente deve definire questi elementi per far funzionare correttamente il programma.
  3. Gestione di un alveare
    In questo esercizio, la classe Alveare rappresenta un sistema per calcolare la produzione totale di miele in base al numero di api e alla quantità di miele prodotto da ciascuna ape. Lo studente deve correggere gli errori presenti nel codice affinché il programma possa funzionare correttamente.
    Obiettivi didattici:
    Comprendere l’uso di un costruttore parametrizzato per inizializzare i dati di un oggetto.
    Dichiarare e definire un metodo membro esterno alla classe.
    Utilizzare oggetti e metodi nel main per realizzare un programma interattivo.
    Errore da individuare e correggere:
    Il metodo calcolaProduzioneTotale è dichiarato come void nella classe ma definito con double al di fuori della classe. Questo genera un errore di mancata corrispondenza. Lo studente deve correggere la dichiarazione del metodo nella classe o nella definizione esterna.
  4. Gestione dell’orto
    L’esercizio prevede la creazione di una classe Orto che calcola il raccolto totale in base al numero di piante e al rendimento medio per pianta. Lo studente deve correggere un errore di definizione del metodo per ottenere un programma funzionante.
    Obiettivi didattici:
    Capire come definire un metodo esterno alla classe.
    Applicare correttamente la sintassi di una funzione membro che accede ai dati privati.
    Approfondire il concetto di costruttore parametrizzato per inizializzare oggetti con dati forniti dall’utente.
    Errore da individuare e correggere:
    Il metodo calcolaRaccoltoTotale è dichiarato nella classe ma non è correttamente associato ad essa nella definizione esterna. Lo studente deve correggere la definizione del metodo aggiungendo il prefisso Orto:: prima del nome del metodo.
  5. Gestione dei dipendenti con la classe Dipendente
    La classe Dipendente rappresenta un lavoratore con un nome e uno stipendio mensile. L’obiettivo dell’esercizio è calcolare lo stipendio annuale e mostrarlo all’utente dopo aver corretto gli errori presenti nel programma.
    Obiettivi didattici:
    Comprendere come definire e utilizzare un costruttore con parametri.
    Dichiarare e implementare un metodo membro privato e utilizzarlo in un metodo pubblico.
    Utilizzare oggetti e metodi per creare programmi interattivi.
    Errore da individuare e correggere:
    Il costruttore Dipendente(string, double) è dichiarato ma non definito. Lo studente deve implementarlo in modo che assegni correttamente i valori ai membri della classe.
  6. Gestione degli esami con la classe Esame
    L’esercizio propone la creazione di una classe Esame per gestire informazioni relative a un esame universitario. Lo studente deve correggere il codice per calcolare il punteggio finale basato sul voto e sui crediti associati all’esame.
    Obiettivi didattici:
    Imparare a gestire dati complessi con una classe.
    Dichiarare e definire costruttori per inizializzare oggetti con più attributi.
    Implementare metodi per calcoli specifici basati sugli attributi privati.
    Errore da individuare e correggere:
    Il costruttore della classe Esame è dichiarato ma manca della parola chiave public, rendendolo non accessibile dal main. Inoltre, il costruttore non è definito, causando un errore di compilazione.
  7. Gestione dell’inventario di magazzino
    In questo esercizio, la classe Magazzino rappresenta un sistema per calcolare il valore totale di un prodotto basato sulla quantità e sul costo unitario. Lo studente deve identificare e correggere gli errori per calcolare e mostrare correttamente il valore totale.
    Obiettivi didattici:
    Comprendere l’uso di un costruttore parametrizzato per inizializzare gli attributi di un oggetto.
    Dichiarare e definire metodi esterni alla classe.
    Integrare costruttori e metodi in un programma interattivo.
    Errore da individuare e correggere:
    Il metodo calcolaValoreTotale è dichiarato come privato, rendendolo inaccessibile dal main. Lo studente deve spostare il metodo nella sezione pubblica della classe per consentirne l’utilizzo nel programma principale.
  8. Gestione della piantagione agricola con calcolo della resa
    Questo esercizio prevede la gestione di una piantagione agricola attraverso una classe Piantagione, che tiene traccia della superficie e della resa per ettaro. L’utente deve inserire questi valori, dopodiché il programma calcolerà e mostrerà la resa totale della piantagione. L’obiettivo principale è correggere l’errore che impedisce il corretto funzionamento del programma, consentendo di ottenere la resa totale.
    Obiettivi didattici:
    Comprendere il controllo delle condizioni tramite metodi booleani.
    Utilizzare correttamente le strutture di controllo if.
    Gestire input dell’utente e stampare risultati formattati.
    Errore da individuare e correggere:
    L’errore è nel fatto che il metodo calcolaResaTotale() non può accedere correttamente agli attributi della classe. La causa è la definizione errata o mancante di un costruttore con accesso ai membri. Lo studente dovrà garantire che il costruttore venga chiamato correttamente per l’oggetto e che tutti i metodi siano accessibili come previsto.
  9. Gestione delle attività con la classe Attività
    In questo esercizio, la classe Attivita gestisce il nome e la durata di un’attività. L’utente inserisce i dati, e il programma stampa il nome e la durata correttamente formattata. Il compito è correggere l’errore che impedisce la corretta compilazione del programma.
    Obiettivi didattici:
    Creazione e utilizzo di costruttori in C++.
    Comprendere la gestione di stringhe e la formattazione dell’output.
    Applicare il concetto di controllo condizionale per una corretta gestione delle unità (ore singolari o plurali).
    Errore da individuare e correggere:
    L’errore principale riguarda la dichiarazione e l’uso del costruttore. In particolare, la definizione del costruttore è errata (ha lo stesso nome della classe ma non è definito correttamente come metodo). Lo studente dovrà sistemare il costruttore e assicurarsi che la stampa del nome e della durata sia corretta.
  10. Gestione degli inventari con la classe Prodotto
    Il programma utilizza una classe Prodotto per calcolare il valore totale in magazzino di un prodotto, dato dalla quantità e dal prezzo per unità. L’esercizio richiede la correzione di un errore di sintassi che impedisce al codice di compilare.
    Obiettivi didattici:
    Imparare a lavorare con costruttori e metodi di classe.
    Gestire la moltiplicazione tra variabili di tipo intero.
    Correggere l’errore di sintassi in C++ dovuto a più definizioni dello stesso costruttore.
    Errore da individuare e correggere:
    Il problema riguarda la presenza di due costruttori con la stessa firma, che causa un errore di compilazione. Lo studente deve eliminare uno dei costruttori, lasciandone uno che inizializza correttamente i valori predefiniti di quantita e prezzo.
  11. Gestione di un dispositivo elettronico
    La classe DispositivoElettronico gestisce due attributi: la percentuale di carica e la temperatura interna. Il dispositivo deve essere operativo solo se la carica è almeno al 20% e la temperatura non supera i 40°C. L’esercizio richiede la correzione degli errori nel controllo dell’operatività del dispositivo.
    Obiettivi didattici:
    Comprendere il controllo delle condizioni tramite metodi booleani.
    Utilizzare correttamente le strutture di controllo if.
    Gestire input dell’utente e stampare risultati formattati.
    Errore da individuare e correggere:
    Il programma non gestisce correttamente i dati input dall’utente. La variabile carica e temperatura sono inizializzate in modo errato nel main. Inoltre, il controllo del metodo dispositivoOperativo() non è integrato con i dati di input. Lo studente deve correggere la gestione delle variabili e assicurarsi che il controllo sia eseguito correttamente.
  12. Gestione di un conto bancario
    Il programma gestisce un conto bancario, che può essere bloccato se il saldo scende al di sotto della soglia minima. L’errore presente impedisce la corretta verifica della condizione di blocco del conto.
    Obiettivi didattici:
    Comprendere l’uso di metodi di classe con ritorno booleano.
    Gestire l’input dell’utente e fare confronti tra variabili.
    Verificare la corretta applicazione delle condizioni logiche.
    Errore da individuare e correggere:
    L’errore riguarda l’inizializzazione e l’uso dei membri saldo e sogliaMinima. Lo studente deve correggere la gestione dei dati, facendo in modo che il metodo contoBloccato() funzioni correttamente con i valori inseriti.
  13. Gestione di un punto nello spazio cartesiano
    Il programma gestisce un oggetto Punto che rappresenta una coordinata nel piano cartesiano, con due attributi x e y. Il programma presenta errori che impediscono di assegnare correttamente i valori e stampare le coordinate.
    Obiettivi didattici:
    Gestire l’assegnazione di valori a oggetti e l’accesso ai membri di una classe.
    Comprendere la gestione dei dati input e output.
    Utilizzare correttamente il costruttore e l’accesso ai membri della classe.
    Errore da individuare e correggere:
    L’errore sta nell’uso errato della sintassi per l’oggetto Punto. Invece di creare un’istanza della classe, il codice sta tentando di accedere direttamente alla classe stessa. Lo studente deve correggere l’accesso agli oggetti e assicurarsi che l’input delle coordinate funzioni correttamente.
  14. Gestione di un’automobile
    Questo programma gestisce un oggetto Automobile, che tiene traccia della velocità e della quantità di carburante. L’errore presente impedisce al programma di ricevere i valori in input e stampare correttamente i dati.
    Obiettivi didattici:
    Gestire correttamente la dichiarazione di oggetti e membri di una classe.
    Comprendere la gestione dei dati input tramite cin e l’output tramite cout.
    Applicare la corretta sintassi per la creazione e manipolazione di oggetti in C++.
    Errore da individuare e correggere:
    L’errore risiede nel fatto che Automobile viene trattato come se fosse una variabile, quando invece dovrebbe essere trattato come una classe. Lo studente deve correggere la sintassi per creare e manipolare correttamente l’oggetto Automobile.
  15. Gestione di un prodotto alimentare con la classe Alimento
    In questo esercizio, viene fornita una classe chiamata Alimento, che rappresenta un prodotto alimentare con il suo nome e il prezzo. L’utente deve inserire il nome dell’alimento, il prezzo unitario e la quantità, e successivamente calcolare il costo totale moltiplicando il prezzo per la quantità. Tuttavia, il programma contiene un errore che impedisce la compilazione. Il compito dello studente è identificare e correggere l’errore, in modo che il programma funzioni correttamente.
    Obiettivi didattici:
    Comprendere l’uso dei costruttori di classe.
    Imparare a istanziare oggetti della classe in un main e chiamare i metodi dell’oggetto.
    Sviluppare la capacità di identificare e correggere errori di compilazione.
    Errore da individuare e correggere:
    L’oggetto Alimento viene creato nel main, ma non viene memorizzato in una variabile. Inoltre, la chiamata al metodo calcolaCosto non è corretta: bisogna usare l’oggetto istanziato per invocarlo.
  16. Gestione dei conti correnti
    In questo esercizio, viene fornita una classe chiamata ContoCorrente, che rappresenta un conto bancario con il nome del proprietario e il saldo. L’utente deve inserire il nome del proprietario del conto, il saldo iniziale e l’importo da depositare, e successivamente calcolare il saldo finale dopo il deposito. Il programma contiene un errore che impedisce la compilazione. Il compito dello studente è identificare e correggere l’errore, in modo che il programma funzioni correttamente.
    Obiettivi didattici:
    Sviluppare la capacità di gestire classi con metodi di modifica e visualizzazione dello stato dell’oggetto.
    Apprendere il concetto di costruttore di classe per inizializzare gli oggetti.
    Identificare e correggere errori nella definizione di classi con metodi duplicati.
    Errore da individuare e correggere:
    La classe ContoCorrente viene definita due volte con lo stesso nome. Bisogna rimuovere la duplicazione della classe per far compilare correttamente il codice.
  17. Correzione di una classe Rettangolo nei marcatori di visibilità
    In questo esercizio, viene fornita una classe Rettangolo che dovrebbe impostare le dimensioni del rettangolo e calcolare la sua area. Tuttavia, il metodo setDimensioni è definito come private, impedendo l’accesso dal main. Il compito dello studente è correggere l’errore nei marcatori di visibilità per rendere il metodo accessibile e far funzionare correttamente il programma.
    Obiettivi didattici:
    Imparare a gestire i modificatori di accesso in C++.
    Capire l’importanza di rendere i metodi di una classe accessibili dal codice esterno.
    Correggere errori di accessibilità dei membri della classe.
    Errore da individuare e correggere:
    Il metodo setDimensioni deve essere reso public per poter essere chiamato nel main. Inoltre, bisogna assicurarsi che l’oggetto Rettangolo venga creato correttamente nel main.
  18. Problemi nell’invocazione di metodi nella classe Punto
    In questo esercizio, viene fornita una classe Punto che ha metodi per impostare le coordinate del punto e stamparle. Tuttavia, nel main vengono invocate le funzioni setXY() e stampa() senza un oggetto su cui chiamarle, causando un errore di compilazione. Il compito dello studente è correggere l’invocazione dei metodi in modo che il programma funzioni correttamente.
    Obiettivi didattici:
    Imparare a creare oggetti e utilizzare i metodi di una classe.
    Comprendere l’importanza di invocare i metodi su oggetti istanziati.
    Correggere errori nel flusso di invocazione di metodi.
    Errore da individuare e correggere:
    I metodi setXY e stampa devono essere invocati sull’oggetto p della classe Punto, e non direttamente senza oggetto.
  19. Correzione di una classe Cerchio, problemi nella costruzione dell’oggetto
    In questo esercizio, viene fornita una classe Cerchio, che calcola la circonferenza dato un raggio. Tuttavia, la classe non ha un costruttore che accetta il valore del raggio come parametro, impedendo l’instaurazione corretta dell’oggetto. Il compito dello studente è aggiungere il costruttore e correggere eventuali altri errori per far funzionare correttamente il programma.
    Obiettivi didattici:
    Comprendere l’uso dei costruttori di classe.
    Imparare a gestire l’inizializzazione degli oggetti tramite costruttori.
    Correggere errori relativi alla creazione degli oggetti e al loro utilizzo.
    Errore da individuare e correggere:
    Aggiungere il costruttore alla classe Cerchio che inizializzi il raggio al momento della creazione dell’oggetto. Inoltre, correggere l’invocazione del metodo calcolaCirconferenza.
  20. Errore nella creazione e uso della classe Libro
    In questo esercizio, viene fornita una classe Libro, che permette di impostare il titolo e l’autore del libro. Tuttavia, la classe non ha un costruttore che accetta i parametri del titolo e autore, e viene erroneamente cercato di utilizzare il costruttore con parametri nel main quando la classe non li ha definiti. Il compito dello studente è aggiungere il costruttore appropriato e correggere gli errori nel codice.
    Obiettivi didattici:
    Imparare a creare un costruttore con parametri in una classe.
    Gestire correttamente l’inizializzazione di un oggetto tramite il costruttore.
    Correggere errori relativi alla creazione e gestione degli oggetti.
    Errore da individuare e correggere:
    Aggiungere il costruttore alla classe Libro per inizializzare i parametri titolo e autore. Rimuovere l’uso del costruttore con parametri non definito nel main.
  21. Correzione della classe Persona e nella definizione dei suoi metodi
    In questo esercizio, viene fornita una classe Persona che deve permettere di impostare il nome e l’età di una persona e stampare queste informazioni. Il metodo stampaDati è dichiarato ma non definito correttamente nella classe. Il compito dello studente è definire correttamente il metodo e far funzionare il programma.
    Obiettivi didattici:
    Comprendere la definizione dei metodi in C++.
    Correggere errori relativi alla dichiarazione e definizione dei metodi.
    Gestire correttamente la stampa dei dati all’interno della classe.
    Errore da individuare e correggere:
    Definire correttamente il metodo stampaDati all’interno della classe Persona e correggere l’errore di invocazione nel main.
  22. Correzione della classe Quadrato e nel nome dei suoi metodi
    In questo esercizio, viene fornita una classe Quadrato che deve calcolare l’area del quadrato dato il lato. Tuttavia, nel main viene utilizzato un metodo non definito correttamente (setLato), che causa un errore di compilazione. Il compito dello studente è correggere il nome del metodo e fare in modo che il programma funzioni correttamente.
    Obiettivi didattici:
    Comprendere la corretta invocazione di metodi di classe.
    Apprendere la gestione dei metodi di accesso e mutazione nelle classi.
    Correggere errori nei nomi dei metodi e nel flusso di invocazione.
    Errore da individuare e correggere:
    Correggere il nome del metodo da setLato a set, in modo che corrisponda al nome definito nella classe.
  23. Correzione dei metodi della classe Tovaglia
    In questo esercizio, viene fornita una classe Tovaglia che deve calcolare la superficie di una tovaglia data la sua lunghezza e larghezza. Tuttavia, i metodi non sono definiti correttamente. Il compito dello studente è correggere la dichiarazione e definizione dei metodi per far funzionare il programma correttamente.
    Obiettivi didattici:
    Imparare a definire metodi per il calcolo della superficie.
    Gestire l’inizializzazione di oggetti con il costruttore.
    Correggere errori nel flusso di calcolo e nelle dichiarazioni dei metodi.
    Errore da individuare e correggere:
    Assicurarsi che il metodo calcolaSuperficie restituisca correttamente il valore della superficie e che il costruttore della classe sia ben definito.
  24. Correzione nell’uso dell’oggetto Rettangolo
    In questo esercizio, viene fornita una classe Rettangolo che deve calcolare l’area del rettangolo. Tuttavia, l’oggetto della classe non è creato correttamente nel main, il che causa un errore. Il compito dello studente è correggere l’inizializzazione e l’uso dell’oggetto Rettangolo.
    Obiettivi didattici:
    Gestire correttamente l’instaurazione e l’uso degli oggetti.
    Apprendere la corretta invocazione dei metodi e l’uso delle classi.
    Correggere errori nell’uso degli oggetti e nei nomi dei metodi.
    Errore da individuare e correggere:
    Creare correttamente un oggetto della classe Rettangolo nel main e invocare correttamente i suoi metodi per calcolare l’area.

Considerazioni finali

Questi esercizi sono progettati per aiutare studenti e docenti a sviluppare una comprensione solida della programmazione orientata agli oggetti in C++. Ogni errore risolto è un passo avanti verso la padronanza di concetti chiave come incapsulamento, visibilità, costruttori e gestione degli oggetti. Usare un compilatore online come WeTambara consente di risolvere questi problemi in tempo reale, offrendo un ambiente interattivo per imparare senza interruzioni.

Con la pratica, gli studenti acquisiranno la sicurezza necessaria per affrontare problemi complessi e scrivere codice efficiente e ben strutturato.