Задача 2. Vectors.
Требуется реализовать несколько классов для проведения математических операций над векторами. Необходимые классы: Vector3d - трехмерный Vector5d - пятимерный VectorNd - произвольной размерности.
В каждом классе должны быть реализованы следующие операции:
- Сложение
- Вычитание
- Скалярное произведение
- Сравнение по координатам
- Строковое представление
Объекты векторов должны быть неизменяемыми. Применение операции между двумя векторами приводит к **появлению нового объекта вектора - результата.
Сигнатуры методов должны быть ограничены тем классом, в котором используются.**
Это означает, что если вызывается метод add у Vector3d, то и аргументом он ожидает Vector3d. И результатом выполенния тоже является Vector3d - то есть сложение трехмерных векторов дает трехмерный вектор, сложение пятимерных - пятимерный. И т.д.
Общая логика сложения должна быть вынесена в базовый абстрактный класс, чьи методы должны быть описаны в интерфейсе.