#include <iostream>
class Point2D;
class Vector2D;
class Point2D
{
friend inline Point2D operator + (const Point2D &p, const Vector2D &v);
friend inline std::ostream & operator<<(std::ostream &os, const Point2D &p);
public:
Point2D():x(0.0),y(0.0){}
Point2D(double x_, double y_):x(x_), y(y_){}
void setX(double x_){x = x_;}
void setY(double y_){y = y_;}
double getX() const {return x;}
double getY() const {return y;}
Point2D & operator *= (double factor)
{
x *= factor;
y *= factor;
return *this;
}
private:
double x;
double y;
};
class Vector2D
{
public:
Vector2D():x(0.0),y(0.0){}
Vector2D(double x_, double y_):x(x_), y(y_){}
Vector2D(const Point2D &p1, const Point2D &p2)
{
x = p2.getX() - p1.getX();
y = p2.getY() - p1.getY();
}
void setX(double x_){x = x_;}
void setY(double y_){y = y_;}
double getX() const {return x;}
double getY() const {return y;}
private:
double x;
double y;
};
inline Point2D operator + (const Point2D &p, const Vector2D &v)
{
return Point2D(p.getX() + v.getX(), p.getY() + v.getY());
}
inline std::ostream & operator<<(std::ostream &os, const Point2D &p)
{
os << "x = " << p.getX() << "; y = " << p.getY() << std::endl;
return os;
}
int main()
{
Point2D p(2.0, 3.0);
Vector2D v(3.0, 4.0);
p *= 5;
std::cout << p + v <<std::endl;
getchar();
return 0;
}