Ho scritto questo codice per fare un po' di pratica con gli operatori, ed ho scoperto una cosa strana:
lo compila correttamente e funziona anche.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; }
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?!?!?!!?