Стоит ли писать классы, представляющие 1D, 2D, 3D точки, используя шаблоны
template <class T>
class Point2D
{
protected:
T X, Y;
public:
Point2D(const T x, const T y) : hot smileyx), Y(y)) {}
...
};
template <class T>
class Point3D : public Point2D<T>
{
protected:
T Z;
public:
Point3D(const T x, const T y, const T z) : Point2D<T>(x,y), Z(z) {}
...
};
... или используя этот подход:
class Point2D
{
protected:
double X, Y;
public:
Point2D(const double x, const double y) : X(x), Y(y)) {}
...
};
class Point3D : public Point2D
{
protected:
double Z;
public:
Point3D(const double x, const double y, const double z) : Point2D(x,y), Z(z) {}
...
};
Мы понимаем координаты как непрерывные переменные, поэтому имеет смысл выражать их, используя двойные значения. Аналогичная ситуация возникает при работе с матрицами. Однако в этом случае широко используются шаблоны ...
Этот класс предназначен не только для одноразового использования, но он будет частью библиотеки ... И моя вторая часть вопроса. Как должны быть реализованы некоторые функции «измерения»?
template <class T>
T getDist(const Point2D <T> * p1, const Point2D<T> *p2)
{
....
}
или
double getDist(const Point2D <T> * p1, const Point2D<T> *p2)
{
....
}
Разумно ли писать такую функцию вообще или для какого-то определенного типа?