/* * point2d.cpp * * Created on: 14.03.2014 * Author: trifon */ #include #include using namespace std; #ifndef POINT2D_CPP_ #define POINT2D_CPP_ template class Point2D { T x, y; public: // конструктори Point2D(); Point2D(T const&, T const&); // селектори T getX() const; T getY() const; double distance() const; double distance(Point2D) const; void print(ostream& = cout) const; // мутатори void setX(T const&); void setY(T const&); // транслация с вектор void reflectX(); void reflectY(); void reflect(); void translate(Point2D); }; template Point2D::Point2D() { x = y = 0; } template Point2D::Point2D(T const& _x, T const& _y) { x = _x; y = _y; } template T Point2D::getX() const { return x; } template T Point2D::getY() const { return y; } template double Point2D::distance() const { return sqrt(getX()*getX() + getY()*getY()); } template double Point2D::distance(Point2D point) const { point.reflect(); point.translate(*this); return point.distance(); } template void Point2D::reflectX() { setX(-getX()); } template void Point2D::reflectY() { setY(-getY()); } template void Point2D::reflect() { reflectX(); reflectY(); } template void Point2D::setX(T const& _x) { x = _x; } template void Point2D::setY(T const& _y) { y = _y; } template void Point2D::print(ostream& os) const { os << '(' << x << ',' << y << ')'; } template ostream& operator<<(ostream& os, Point2D const& p) { p.print(os); } template void Point2D::translate(Point2D point) { //x += point.getX(); //y += point.getY(); setX(getX() + point.getX()); setY(getY() + point.getY()); } #endif /* POINT2D_CPP_ */