// Copyright (C) 1991 - 1999 Rational Software Corporation

#if defined (_MSC_VER) && (_MSC_VER >= 1000)
#pragma once
#endif
#ifndef _INC_SHAPE_46F50BDC00BB_INCLUDED
#define _INC_SHAPE_46F50BDC00BB_INCLUDED
//////////////////////////////////////////////////////////////////////////
#include <ostream>
#include <list>

#include "../Elements.h"
//////////////////////////////////////////////////////////////////////////
using std::list;
//////////////////////////////////////////////////////////////////////////
//обобщенная фигура

class Shape
: public CElement
{
private:
    //счетчик объектов
    
    static int _counter;

    //идентификатор объекта
    
    int _id;
protected:
    //абсцисса фигуры. все фигуры по умолчанию появляются в начале координат
    
    float _x;
    
    //ордината фигуры. все фигуры по умолчанию появляются в начале координат
    
	float _y;

    
    Shape(float x, float y);
    
    //вывести состояние фигуры в поток
    
    virtual std::ostream& speak(std::ostream& os) const;
public:
	//идентификатор типа объекта
	
    virtual int getType() const =0;

    //идентификатор фигуры используется при сериализации документа
	
	const int get__id() const;

	
	Shape();

	
	virtual void Serialize(CArchive& ar);

    //рисует идентификатор фигуры
    
    void drawID(CDC* pDC, bool isIdVisible = true) const;

	//изменяет размер фигуры
	
	virtual void resize(CPoint Start, CPoint End);

	
	virtual void Move(CSize& aSize);

    
    virtual ~Shape();

    //получить ординату фигуры
    
    const float get__y() const;
    
    //задать ординату фигуры
    
    void set__y(float value);
    
    //получить абсциссу фигуры
    
    const float get__x() const;
    
    //задать абциссу фигуры
    
	void set__x(float value);

    //оператор вывода в поток
    
    friend std::ostream& operator<<(std::ostream& o, const Shape& rhs);

    
    virtual bool operator==(const Shape& rhs) const;

	//перенести фигуру в заданную точку
	
	void moveToPoint(float x_pos, float y_pos);

    //вычисляет площадь фигуры
    
    virtual float Area() const = 0;
};
//////////////////////////////////////////////////////////////////////////
#endif /* _INC_SHAPE_46F50BDC00BB_INCLUDED */
Соседние файлы в папке shapes