Linguaggio C++

Metodi Getter

Laboratorio sulla gestione avanzata di array di oggetti in C++. Implementazione di cicli for per la scansione dell'inventario e algoritmi di ricerca per nome all'interno del distributore.

Durata

150 minuti

Software

Dev-C++ o Code::Blocks

L'Iterazione Programmata: Potenza del Ciclo For

Quando gestiamo un distributore con decine di scomparti, non possiamo interagire con ogni oggetto singolarmente. Il ciclo for ci permette di automatizzare compiti ripetitivi come il controllo delle scorte o la stampa del listino prezzi.

Algoritmo di Ricerca Lineare

Per permettere a un utente di trovare una merendina specifica tramite il nome, dobbiamo implementare una ricerca lineare:

  • Scorriamo l'array dalla posizione 0 alla fine.
  • Per ogni oggetto, confrontiamo il nome richiesto con quello salvato nell'attributo dell'oggetto.
  • Se troviamo una corrispondenza, eseguiamo l'operazione (es. erogazione).

Nota tecnica: Poiché il nome della merendina è private, avremo bisogno di un metodo pubblico chiamato "getter" (es. getNome()) che ci restituisca il valore per poterlo confrontare nel main.


I Metodi Getter: La Finestra sui Dati Privati

Abbiamo stabilito che per proteggere i dati, gli attributi (come nome o prezzo) devono essere private. Tuttavia, il programma ha spesso bisogno di conoscere quei valori (ad esempio per stamparli o confrontarli).

Perché non rendere tutto public?

Se rendiamo un dato public, chiunque può sia leggerlo che modificarlo. Il Getter ci permette di separare queste due azioni: creiamo una funzione che permette solo di "guardare" il dato senza poterlo toccare.


LABORATORIO

Ricerca e Vendita Intelligente

Obiettivo: Implementare un sistema di ricerca testuale per permettere l'acquisto di un prodotto tramite il suo nome all'interno di un array di oggetti.


1 Classe Merendina con Metodo di Lettura (Getter)

Aggiungiamo il metodo getNome() per permettere al main di leggere il nome privato durante la ricerca.


#include <iostream>
#include <string>
using namespace std;

class Merendina {
private:
    string nome;
    int quantita;

public:
    void setup(string n, int q) {
        nome = n;
        quantita = q;
    }

    // GETTER: permette di leggere il nome privato dall'esterno
    string getNome() {
        return nome;
    }

    void eroga() {
        if (quantita > 0) {
            quantita--;
            cout << "Erogazione di " << nome << " riuscita!" << endl;
        } else {
            cout << "Spiacente, " << nome << " e' esaurito." << endl;
        }
    }
};

2 Implementazione della Ricerca nel Main

Utilizziamo un ciclo for combinato con un'istruzione if per trovare il prodotto digitato dall'utente.


int main() {
    Merendina scomparti[3];
    scomparti[0].setup("Fonzies", 5);
    scomparti[1].setup("KitKat", 2);
    scomparti[2].setup("Mars", 0);

    string ricerca;
    bool trovato = false;

    cout << "Quale prodotto vuoi acquistare? ";
    cin >> ricerca;

    // CICLO DI RICERCA
    for (int i = 0; i < 3; i++) {
        if (scomparti[i].getNome() == ricerca) {
            scomparti[i].eroga();
            trovato = true;
            break; // Esco dal ciclo appena trovo il prodotto
        }
    }

    if (!trovato) {
        cout << "Prodotto non trovato nel catalogo." << endl;
    }

    return 0;
}

3 Esercizio

Applica le seguenti modifiche per completare il progetto:

  • Rifornimento Completo: Crea una funzione che riporta tutte le merendine a 20 pezzi.
  • Rifornimento Selettivo: Crea una funzione che chiede il nome di un prodotto e, se trovato, ne aumenta la quantità di 10 pezzi.
  • Controllo Scorte: Usa un ciclo for per stampare l'elenco di tutti i prodotti che hanno quantità pari a 0 (lista sottoscorta).
  • Case Insensitive (Difficile): Fai in modo che la ricerca funzioni anche se l'utente scrive "mars" tutto minuscolo mentre il prodotto è salvato come "Mars".





OOP, Array di Oggetti, Ricerca, Ciclo For, C++,