
Дан абстрактный класс Point, описывающий точку в пространстве class Point { protected: double
*arr; //массив с координатами по осям size_t size; //размерность пространства public: virtual void print() = 0; //вывод координат }; Задание: 1. Добавить в класс Point конструктор(ы) 2. Унаследовать от класса Point два класса - Point2D и Point3D, в которых переопределить метод print. Для хранения координат использовать массив arr 3. Добавить в классы Point, Point2D и Point3D деструкторы Point2D - описывает точку в двумерном пространстве (на вход конструктору подаются координаты по осям x и y) Point3D - описывает точку в трёхмерном пространстве (на вход конструктору подаются координаты по осям x, y и z) Пример использования классов: int main (int argc, char *argv[]) { Point *p1 = new Point2D(1.5, 4.8); Point *p2 = new Point3D(1.0, 10.2, 3.3); p1->print(); p2->print(); delete p1; delete p2; return 0; } Вывод: x = 1.5 y = 4.8 x = 1.0 y = 10.2 z = 3.3

Ответы на вопрос

Ответ:
#include <iostream>
#include <iomanip>
class Point {
protected:
double* arr; //массив с координатами по осям
size_t size; //размерность пространства
public:
Point(size_t s) : size(s) {
arr = new double[s];
}
~Point() {
delete[] arr;
}
virtual void print() = 0; //вывод координат
};
class Point2D : public Point {
public:
Point2D(double x,double y) : Point(2) {
arr[0] = x; arr[1] = y;
}
void print() override {
std::cout << "x = " << std::fixed << std::setprecision(1) << arr[0] << " y = " << arr[1] << std::endl;
}
};
class Point3D : public Point {
public:
Point3D(double x, double y, double z) : Point(3) {
arr[0] = x; arr[1] = y; arr[2] = z;
}
void print() override {
std::cout << "x = " << std::fixed << std::setprecision(1) << arr[0] << " y = " << arr[1]
<< " z = " << arr[2] << std::endl;
}
};
int main(int argc, char* argv[]) {
Point* p1 = new Point2D(1.5, 4.8);
Point* p2 = new Point3D(1.0, 10.2, 3.3);
p1->print();
p2->print();
delete p1;
delete p2;
return 0;
}



Конечно, вот полный код, который реализует вашу задачу:
cpp#include <iostream>
class Point {
protected:
double *arr;
size_t size;
public:
Point(size_t dimensions) : size(dimensions) {
arr = new double[size];
}
virtual void print() = 0;
virtual ~Point() {
delete[] arr;
}
};
class Point2D : public Point {
public:
Point2D(double x, double y) : Point(2) {
arr[0] = x;
arr[1] = y;
}
void print() override {
std::cout << "x = " << arr[0] << " y = " << arr[1] << std::endl;
}
};
class Point3D : public Point {
public:
Point3D(double x, double y, double z) : Point(3) {
arr[0] = x;
arr[1] = y;
arr[2] = z;
}
void print() override {
std::cout << "x = " << arr[0] << " y = " << arr[1] << " z = " << arr[2] << std::endl;
}
};
int main(int argc, char *argv[]) {
Point *p1 = new Point2D(1.5, 4.8);
Point *p2 = new Point3D(1.0, 10.2, 3.3);
p1->print();
p2->print();
delete p1;
delete p2;
return 0;
}
Этот код создает абстрактный класс Point
с конструктором и деструктором, и два производных класса Point2D
и Point3D
, которые также имеют свои конструкторы и переопределенный метод print
. В функции main
создаются объекты Point2D
и Point3D
, и вызывается их метод print
, а затем объекты удаляются при помощи оператора delete
.


Похожие вопросы
Топ вопросов за вчера в категории Информатика







Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili