Лабораторная работа №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; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!