Ho scritto questo codice per fare un po' di pratica con gli operatori, ed ho scoperto una cosa strana:
codice:
#include <iostream>
using namespace std;
class Zn
{
private:
unsigned int _n;
int _val;
int _mod(int x);
public:
Zn(unsigned int n){ _n = n; }
Zn operator =(Zn b);
Zn operator =(int x);
Zn operator +(Zn b);
//Zn operator -(Zn b;)
void print(){ cout << _val<< "\n" ; }
};
int Zn::_mod(int x)
{
if (x < 0)
return _n - ((-x) % _n);
else
return x % _n;
}
Zn Zn::operator =(Zn b)
{
cout << "Chiamato Zn = Zn\n";
_val = _mod(b._val);
return *this;
}
Zn Zn::operator =(int x)
{
cout << "Chiamato Zn = Int\n";
_val = _mod(x);
return *this;
}
Zn Zn::operator +(Zn b)
{
cout << "Chiamato Zn + Zn\n";
Zn temp(_n);
temp = _mod(_val + b._val);
return temp;
}
int main()
{
Zn a(5), b(5), c(5);
a = 2; cout << "STOP 1!\n";
c = a + 4; cout << "STOP 2!\n";
a.print(); c.print();
return 0;
}
lo compila correttamente e funziona anche.
Ora, io ho ridefinito l' = tra classe e classe, e tra classe e int, e il + tra classe e classe.
Nel main vado a fare con c = a + 4, classe + int, ma classe + int non è definita! Come fa a "indovinare" cosa deve fare?!?!?!!?