Лабораторная работа №7. Интерфейсы.
// Реализовать все указанные интерфейсы для классов (согласно варианту):
// - A) Круг
// - B) Отрезок
// - C) Равносторонний треугольник
// - D) Прямоугольник
// - E) Шестиугольник
// - F) Параллелограмм
// - G) Равнобедренная трапеция
// - H) Эллипс (периметр можно считать по любой приближенной формуле:
// см. интернет, справочники и т.п.).
//
// Функционал системы:
// - Динамическое добавление фигур пользователем.
// - Отобразить все фигуры.
// - Общая площадь всех фигур.
// - Общий периметр всех фигур.
// - Центр масс всей системы.
// - Память, занимаемая всеми экземплярами классов.
// - Сравнение фигур между собой по массе.
//
// Вопросы для обдумывания:
// - Есть ли необходимость делать методы сравнения по массе виртуальными?
// - Получится ли также перегрузить операторы сравнения для интерфейса BaseCObject
// чтобы сравнивать объекты по объему занимаемой памяти?
// - Предположите, что в дальнейшем придется изменить код таким образом,
// чтобы фигуры (оставаясь сами по себе плоскими) задавались уже не в двумерном,
// а в трехмерном пространстве. Укажите как бы вы действовали? Что пришлось бы
// изменить?
// Интерфейс "Геометрическая фигура".
class GeoFig {
public:
// Площадь.
virtual double square () = 0;
// Периметр.
virtual double perimeter () = 0;
};
// Вектор
class Vector2D {
public:
double x, y;
};
// Интерфейс "Физический объект".
class PhysObject {
public:
// Масса, кг.
virtual double mass () = 0;
// Координаты центра масс, м.
|
|
virtual Vector2D position () = 0;
// Сравнение по массе.
virtual bool operator== (const PhysObject& ob) const = 0;
// Сравнение по массе.
virtual bool operator< (const PhysObject& ob) const = 0;
};
// Интерфейс "Отображаемый"
class Printable {
public:
// Отобразить на экране
// (выводить в текстовом виде параметры фигуры).
virtual void draw () = 0;
};
// Интерфейс для классов, которые можно задать через диалог с пользователем.
class DialogInitiable {
// Задать параметры объекта с помощью диалога с пользователем.
virtual void initFromDialog () = 0;
};
// Интерфейс "Класс"
class BaseCObject {
public:
// Имя класса (типа данных).
virtual const char* classname () = 0;
// Размер занимаемой памяти.
virtual unsigned int size () = 0;
};
// - A) Круг
// - B) Отрезок
// - C) Равносторонний треугольник
// - D) Прямоугольник
// - E) Шестиугольник
// - F) Параллелограмм
// - G) Равнобедренная трапеция
// - H) Эллипс
A | B | C | D | E | F | G | H | |
X | X | |||||||
X | X | |||||||
X | X | |||||||
X | X | |||||||
X | X | |||||||
X | X | |||||||
X | X | |||||||
X | X | |||||||
X | X | |||||||
X | X | |||||||
X | X | |||||||
X | X | |||||||
X | X | |||||||
X | X | |||||||
X | X | |||||||
X | X | |||||||
X | X | |||||||
X | X | |||||||
X | X | |||||||
X | X | |||||||
X | X | |||||||
X | X | |||||||
X | X |
Дата добавления: 2016-01-05; просмотров: 11; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!