/* Teht„v„ 2.32 Lis„„ operaattoreita Lis„tty teht„v„ss„ mainitut operaattorit ja funktiot. Operaattori+ :lle en keksinyt mit„„n j„rkev„„ k„ytt”„, mutta kyll„ saattaisi olla olemassa. */ #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-=(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; friend double fabs(const cPaikka &p); int operator== (const cPaikka &p); cPaikka operator-() const; // -p; ei p1-p2; vaan i=-5; a = -i; cPaikka operator+() const; // +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-=(cPaikka &p2) //teht„v„ 3 { 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 cPaikka::operator==(const cPaikka &p) //teht„v„ 2 { if ( ( x==p.x ) && ( y==p.y ) ) return 1; //samat return 0; // return ( ( x==p.x ) && ( y==p.y ) ); } cPaikka cPaikka::operator-() const //teht„v„ 4 { return cPaikka(-x,-y); } cPaikka cPaikka::operator+() const //teht„v„ 5 { return cPaikka(abs(x),abs(y)); } int operator+(int i, cPaikka &p) { return i + p.x; } // double d1 = -5; double d2 = fabs(d1); double fabs(const cPaikka &p) //teht„v„ 1 { return sqrt( p.x*p.x + p.y*p.y ); } 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; if (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) -p2; p2.tulosta(); +p2; p2.tulosta(); 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; }