🚀 Nuova versione beta disponibile! Feedback o problemi? Contattaci

Esercizi Metodi e Attributi Statici C++

Codegrind Team•Jul 12 2024

Ecco degli esercizi semplici con soluzione per praticare l’utilizzo dei metodi e attributi statici in C++.

Esercizio 1: Attributo statico semplice

Creare una classe con un attributo statico e un metodo per incrementarlo.
#include <iostream>

class Contatore {
private:
    static int contatore;
public:
    static void incrementa() {
        contatore++;
    }
    static int getContatore() {
        return contatore;
    }
};

int Contatore::contatore = 0;

int main() {
    Contatore::incrementa();
    Contatore::incrementa();
    std::cout << "Valore del contatore: " << Contatore::getContatore() << std::endl;
    return 0;
}

Esercizio 2: Metodo statico semplice

Creare una classe con un metodo statico che stampa un messaggio.
#include <iostream>

class Messaggio {
public:
    static void stampa() {
        std::cout << "Ciao, mondo!" << std::endl;
    }
};

int main() {
    Messaggio::stampa();
    return 0;
}

Esercizio 3: Attributo statico condiviso

Creare una classe con un attributo statico condiviso tra tutte le istanze della classe.
#include <iostream>

class Condiviso {
public:
    static int valoreCondiviso;
    void incrementa() {
        valoreCondiviso++;
    }
};

int Condiviso::valoreCondiviso = 0;

int main() {
    Condiviso obj1, obj2;
    obj1.incrementa();
    obj2.incrementa();
    std::cout << "Valore condiviso: " << Condiviso::valoreCondiviso << std::endl;
    return 0;
}

Esercizio 4: Contatore di istanze

Creare una classe che tiene traccia del numero di istanze create usando un attributo statico.
#include <iostream>

class Istanza {
private:
    static int contatore;
public:
    Istanza() {
        contatore++;
    }
    static int getNumeroIstanze() {
        return contatore;
    }
};

int Istanza::contatore = 0;

int main() {
    Istanza obj1, obj2, obj3;
    std::cout << "Numero di istanze create: " << Istanza::getNumeroIstanze() << std::endl;
    return 0;
}

Esercizio 5: Metodo statico con parametri

Creare una classe con un metodo statico che accetta parametri e restituisce un valore.
#include <iostream>

class Matematica {
public:
    static int somma(int a, int b) {
        return a + b;
    }
};

int main() {
    int risultato = Matematica::somma(3, 4);
    std::cout << "Somma: " << risultato << std::endl;
    return 0;
}

Esercizio 6: Inizializzazione di attributi statici complessi

Creare una classe con un attributo statico complesso (ad esempio, un std::vector) e un metodo per manipolarlo.
#include <iostream>
#include <vector>

class Collezione {
private:
    static std::vector<int> valori;
public:
    static void aggiungiValore(int valore) {
        valori.push_back(valore);
    }
    static void stampaValori() {
        for (int valore : valori) {
            std::cout << valore << " ";
        }
        std::cout << std::endl;
    }
};

std::vector<int> Collezione::valori;

int main() {
    Collezione::aggiungiValore(1);
    Collezione::aggiungiValore(2);
    Collezione::aggiungiValore(3);
    Collezione::stampaValori();
    return 0;
}

Esercizio 7: Classe con costante statica

Creare una classe con un attributo costante statico.
#include <iostream>

class Costante {
public:
    static const int valoreCostante = 100;
};

int main() {
    std::cout << "Valore costante: " << Costante::valoreCostante << std::endl;
    return 0;
}

Esercizio 8: Contatore di istanze distrutte

Creare una classe che tiene traccia del numero di istanze distrutte usando un attributo statico.
#include <iostream>

class Istanza {
private:
    static int contatore;
public:
    Istanza() {
        contatore++;
    }
    ~Istanza() {
        contatore--;
    }
    static int getNumeroIstanze() {
        return contatore;
    }
};

int Istanza::contatore = 0;

int main() {
    {
        Istanza obj1, obj2;
        std::cout << "Numero di istanze create: " << Istanza::getNumeroIstanze() << std::endl;
    }
    std::cout << "Numero di istanze create dopo distruzione: " << Istanza::getNumeroIstanze() << std::endl;
    return 0;
}