/* OPERATO1.CPP */ // Esimerkki Operaatoreiden lis„m„„rit„misest„. // Huomatus! Esimerkkin operattorit eiv„t v„ltt„m„tt„ muodosta // kunnon "algebraa" #include #include class cPaikka { int x,y; public: void tulosta() const {printf("(%d,%d)\n",x,y);} void aseta(int nx,int ny) { x=nx; y=ny; } cPaikka(int ix=0, int iy=0) { aseta(ix,iy); } cPaikka operator+(cPaikka &p2); // p3 = p1 + p2, vrt. p3 = +(p1,p2) cPaikka operator-(cPaikka &p2); // p3 = p1 - p2; cPaikka operator+=(cPaikka &p2); // p1 += p2; cPaikka &operator=(int i); // p1 = i; cPaikka &operator=(cPaikka &p2); // p3 = p2; cPaikka &operator++(); // ++p cPaikka operator++(int i); // p1++ (i=0) cPaikka &operator+=(int i); // p1 += 5; operator double() {return sqrt(x*x+y*y);}// d = p1; operator int() {return x; }// i = p1; friend int operator+(int i, cPaikka &p); // i = 5 + p; }; cPaikka cPaikka::operator+(cPaikka &p2) { cPaikka t; t.x = x + p2.x; t.y = y + p2.y; return t; } cPaikka cPaikka::operator-(cPaikka &p2) { cPaikka t; t.x = x - p2.x; t.y = y - p2.y; return t; } cPaikka cPaikka::operator+=(cPaikka &p2) { x += p2.x; y += p2.y; return *this; } cPaikka &cPaikka::operator=(int i) { x = i; y = 0; return *this; } cPaikka &cPaikka::operator=(cPaikka &p2) { x = p2.x; y = p2.y; return *this; } cPaikka &cPaikka::operator++() // ++p { x++; return *this; } cPaikka cPaikka::operator++(int /* i */) // p++ { cPaikka t(*this); x++; return t; } cPaikka &cPaikka::operator+=(int i) { x += i; return *this; } int operator+(int i, cPaikka &p) { return i + p.x; } int main(void) { cPaikka p1(2,2),p2(1,4),p3; p3 = p1 + p2; p3.tulosta(); // (3,6) p3 = p3 - p1; p3.tulosta(); // (1,4) p2.tulosta(); // (1,4) p3 = p1; p3.tulosta(); // (2,2) p3 = 9; p3.tulosta(); // (9,0) // jollei = -m„„rityst„, kutsuisi // rakentajaa cPaikka(9) p3 += p2; p3.tulosta(); // (10,4) ++p2; p2.tulosta(); // (2,4) p2++; p2.tulosta(); // (3,4) p2+=4; p2.tulosta(); // (7,4) int i; i = 4+p2; printf ("i=%d\n",i); // 11 // Ilman friend-funktiota ei // saisi n„in p„in i = p3; printf ("i=%d\n",i); // 10 double d = p3; printf ("d=%3.2lf\n",d); // 10.77 return 0; }