Intelligenza Artificiale

A un certo punto non fu più la biologia a dominare il destino dell'uomo, ma il prodotto del suo cervello: la cultura.
Cosicché: "Le uniche leggi della materia sono quelle che la nostra mente deve architettare e le uniche leggi della mente sono architettate per essa dalla materia".
JAMES CLERK MAXWELL

KeyWords this e Explicit C++


Uso this e Conversioni

Utilizzato this


#include <iostream>

class MyClass {
private:
    int x;

public:
    // Costruttore che utilizza this per inizializzare la variabile di istanza x
    MyClass(int x) {
        // Utilizzo di this per riferirsi alla variabile di istanza x
        this->x = x;
    }

    // Metodo per visualizzare il valore di x
    void displayX() {
        std::cout << "Valore di x: " << this->x << std::endl;
    }
};

int main() {
    // Creazione di un oggetto della classe MyClass con il costruttore chiamato
    MyClass obj(42);

    // Chiamata al metodo displayX sull'oggetto
    obj.displayX();

    return 0;
}

Explicit

In C++, la parola chiave `explicit` viene utilizzata per specificare che un costruttore o una funzione di conversione non può essere chiamato implicitamente dal compilatore durante le conversioni implicite di tipo. Questo significa che la conversione deve essere espressamente richiesta dal programmatore.

Costruttore esplicito




   class MyClass {
   public:
       // Costruttore esplicito
       explicit MyClass(int value) {
           // Inizializzazione della classe...
       }

       // Altri membri della classe...
   };

   int main() {
       // Creazione di un oggetto MyClass con un valore intero
       MyClass obj1(42);

       // La seguente riga genererà un errore, poiché il costruttore è esplicito
       // MyClass obj2 = 42; // Errore!

       // Creazione esplicita dell'oggetto
       MyClass obj3 = MyClass(42);

       return 0;
   }

Nel caso sopra, il costruttore di `MyClass` è dichiarato come esplicito.
Questo significa che non verrà chiamato automaticamente quando si cerca di inizializzare un oggetto di tipo `MyClass` con un valore intero, a meno che la chiamata non sia esplicita, come mostrato in `MyClass obj3 = MyClass(42);`.

Funzione di conversione esplicita


   class Distance {
   private:
       int feet;

   public:
       // Costruttore
       explicit Distance(int f) : feet(f) {}

       // Funzione di conversione esplicita da Distance a int
       explicit operator int() const {
           return feet;
       }
   };

   int main() {
       Distance d(5);

       // La seguente riga genererà un errore, poiché la conversione è esplicita
       // int feet_value = d; // Errore!

       // Conversione esplicita richiesta
       int feet_value = static_cast<int>(d);

       return 0;
   }

Nel secondo esempio, la funzione di conversione da `Distance` a `int` è dichiarata come esplicita.
Questo significa che quando si tenta di assegnare un oggetto `Distance` a una variabile di tipo `int`, è necessario utilizzare esplicitamente `static_cast<int>(d)`.