si infatti....

quando scrivi return (val + x.val), val fa parte dello stato dell'oggetto chiamante, mentre x.val fa parte dell'oggetto x passato come parametro alla funzione.

se ci mettevi val + x giustamente non te lo compila perchè usi oggetti diversi

se ci metti val + val ti fa il doppio del valore dell'oggetto chiamante, che non è quello che tu vuoi.

ciauz!