سلام!
جواب تمرین قبلی را می توانید در کد زیر مشاهده کنید.
#include <iostream>
#include <cstdio>
using namespace std;
class Point{
friend void set(Point*, double = 0, double = 0);
friend istream &operator>>(istream&, Point&);
friend ostream &operator<<(ostream&, const Point&);
private:
double _x, _y;
public:
Point(double = 0, double = 0);
double x() const;
double y() const;
void setX(double);
void setY(double);
void print();
};
Point::Point(double x, double y){
this->setX(x);
this->setY(y);
}
void Point::setX(double x){
this->_x = x;
}
void Point::setY(double y){
this->_y = y;
}
double Point::x() const{
return this->_x;
}
double Point::y() const{
return this->_y;
}
void Point::print(){
printf("(%g, %g)", this->x(), this->y());
}
Point operator+(const Point &p1, const Point &p2){
return Point(p1.x() + p2.x(), p1.y() + p2.y());
}
Point operator-(const Point &p1, const Point &p2){
return Point(p1.x() - p2.x(), p1.y() - p2.y());
}
Point operator*(const Point &p1, const Point &p2){
return Point(p1.x() * p2.x(), p1.y() * p2.y());
}
Point operator/(const Point &p1, const Point &p2){
return Point(p1.x() / p2.x(), p1.y() / p2.y());
}
Point operator+(const int &a, Point &p){
return Point(p.x() + a, p.y() + a);
}
Point operator+(const Point &p, const int &a){
return Point(p.x() + a, p.y() + a);
}
bool operator>(const Point &p1, const Point &p2){
if (p1.x() > p2.x())
return true;
if (p1.y() > p2.y())
return true;
return false;
}
bool operator==(const Point &p1, const Point &p2){
return p1.x() == p2.x() && p1.y() == p2.y();
}
bool operator!=(const Point &p1, const Point &p2){
return !(p1 == p2);
}
bool operator<(const Point &p1, const Point &p2){
return !(p1 > p2) && !(p1 == p2);
}
bool operator<=(const Point &p1, const Point &p2){
return !(p1 > p2);
}
bool operator>=(const Point &p1, const Point &p2){
return !(p1 < p2);
}
void operator+=(Point &p1, const Point &p2){
p1.setX(p1.x() + p2.x());
p1.setY(p1.y() + p2.y());
}
void operator+=(Point &p1, const int &a){
p1.setX(p1.x() + a);
p1.setY(p1.y() + a);
}
void operator-=(Point &p1, const Point &p2){
p1.setX(p1.x() - p2.x());
p1.setY(p1.y() - p2.y());
}
void operator-=(Point &p1, const int &a){
p1.setX(p1.x() - a);
p1.setY(p1.y() - a);
}
void operator*=(Point &p1, const Point &p2){
p1.setX(p1.x() * p2.x());
p1.setY(p1.y() * p2.y());
}
void operator*=(Point &p1, const int &a){
p1.setX(p1.x() * a);
p1.setY(p1.y() * a);
}
void operator/=(Point &p1, const Point &p2){
p1.setX(p1.x() / p2.x());
p1.setY(p1.y() / p2.y());
}
void operator/=(Point &p1, const int &a){
p1.setX(p1.x() / a);
p1.setY(p1.y() / a);
}
istream &operator>>(istream &input, Point &p){
input >> p._x >> p._y;
return input;
}
ostream &operator<<(ostream &output, const Point &p){
output << '(' << p._x << ", " << p._y << ')';
return output;
}
Point operator++(Point &p){
p.setX(p.x() + 1);
p.setY(p.y() + 1);
return p;
}
Point operator++(Point &p, int){
Point p2 = p;
p.setX(p.x() + 1);
p.setY(p.y() + 1);
return p2;
}
int main(){
Point p1, p2;
cin >> p1 >> p2;
cout << (p1 + p2) << endl;
return 0;
}
در این فایل عمل گر ها به صورت کلی بهبود یافته اند و این تغییرات فقط مختص به جلسه ی پیش نیست.
هر سوالی داشتید در قسمت نظرات بپرسید.
موفق باشید!