🚀 Nuova versione beta disponibile! Feedback o problemi? Contattaci

Esercizi Operatori Conversione C++

Codegrind Team•Jul 12 2024

Ecco degli esercizi semplici con soluzione per praticare l’utilizzo degli operatori di conversione in C++.

Esercizio 1: Conversione implicita con costruttore

Creare una classe che permette la conversione implicita da un tipo base con un costruttore.
#include <iostream>

class MyClass {
private:
    int valore;
public:
    MyClass(int v) : valore(v) {}
    void stampa() const {
        std::cout << "Valore: " << valore << std::endl;
    }
};

int main() {
    MyClass obj = 42; // Conversione implicita
    obj.stampa();
    return 0;
}

Esercizio 2: Conversione implicita con operatore di conversione

Creare una classe che permette la conversione implicita a un tipo base con un operatore di conversione.
#include <iostream>

class MyClass {
private:
    int valore;
public:
    MyClass(int v) : valore(v) {}
    operator int() const {
        return valore;
    }
};

int main() {
    MyClass obj(42);
    int val = obj; // Conversione implicita
    std::cout << "Valore: " << val << std::endl;
    return 0;
}

Esercizio 3: Conversione esplicita con operatore di conversione

Creare una classe che permette la conversione esplicita a un tipo base con un operatore di conversione esplicita.
#include <iostream>

class MyClass {
private:
    int valore;
public:
    MyClass(int v) : valore(v) {}
    explicit operator int() const {
        return valore;
    }
};

int main() {
    MyClass obj(42);
    int val = static_cast<int>(obj); // Conversione esplicita
    std::cout << "Valore: " << val << std::endl;
    return 0;
}

Esercizio 4: Conversione implicita tra classi

Creare due classi che permettono la conversione implicita tra loro con costruttori di conversione.
#include <iostream>

class ClassB;

class ClassA {
private:
    int valore;
public:
    ClassA(int v) : valore(v) {}
    ClassA(const ClassB& b);
    void stampa() const {
        std::cout << "ClassA Valore: " << valore << std::endl;
    }
};

class ClassB {
private:
    int valore;
public:
    ClassB(int v) : valore(v) {}
    operator ClassA() const {
        return ClassA(valore);
    }
    void stampa() const {
        std::cout << "ClassB Valore: " << valore << std::endl;
    }
};

ClassA::ClassA(const ClassB& b) : valore(b.valore) {}

int main() {
    ClassA a = 42;
    ClassB b = a; // Conversione implicita
    b.stampa();
    a = b; // Conversione implicita
    a.stampa();
    return 0;
}

Esercizio 5: Conversione esplicita tra classi

Creare due classi che permettono la conversione esplicita tra loro con costruttori di conversione espliciti.
#include <iostream>

class ClassB;

class ClassA {
private:
    int valore;
public:
    explicit ClassA(int v) : valore(v) {}
    explicit ClassA(const ClassB& b);
    void stampa() const {
        std::cout << "ClassA Valore: " << valore << std::endl;
    }
};

class ClassB {
private:
    int valore;
public:
    explicit ClassB(int v) : valore(v) {}
    explicit operator ClassA() const {
        return ClassA(valore);
    }
    void stampa() const {
        std::cout << "ClassB Valore: " << valore << std::endl;
    }
};

ClassA::ClassA(const ClassB& b) : valore(b.valore) {}

int main() {
    ClassA a(42);
    ClassB b = static_cast<ClassB>(a); // Conversione esplicita
    b.stampa();
    a = static_cast<ClassA>(b); // Conversione esplicita
    a.stampa();
    return 0;
}

Esercizio 6: Conversione con puntatori

Creare una classe che permette la conversione a un puntatore con un operatore di conversione.
#include <iostream>

class MyClass {
private:
    int valore;
public:
    MyClass(int v) : valore(v) {}
    operator int*() {
        return &valore;
    }
};

int main() {
    MyClass obj(42);
    int* ptr = obj; // Conversione implicita
    std::cout << "Valore puntato: " << *ptr << std::endl;
    return 0;
}

Esercizio 7: Conversione a stringa

Creare una classe che permette la conversione a una stringa con un operatore di conversione.
#include <iostream>
#include <string>

class MyClass {
private:
    int valore;
public:
    MyClass(int v) : valore(v) {}
    operator std::string() const {
        return std::to_string(valore);
    }
};

int main() {
    MyClass obj(42);
    std::string str = obj; // Conversione implicita
    std::cout << "Valore come stringa: " << str << std::endl;
    return 0;
}

Esercizio 8: Conversione a tipo personalizzato

Creare una classe che permette la conversione a un tipo personalizzato con un operatore di conversione.
#include <iostream>

class CustomType {
private:
    int valore;
public:
    CustomType(int v) : valore(v) {}
    void stampa() const {
        std::cout << "CustomType Valore: " << valore << std::endl;
    }
};

class MyClass {
private:
    int valore;
public:
    MyClass(int v) : valore(v) {}
    operator CustomType() const {
        return CustomType(valore);
    }
};

int main() {
    MyClass obj(42);
    CustomType ct = obj; // Conversione implicita
    ct.stampa();
    return 0;
}