Скачиваний:
17
Добавлен:
01.05.2014
Размер:
3.49 Кб
Скачать
#ifndef CMNSTR

#define CMNSTR
#define POINTTYPE int
#define ELEMENT Point

///////////////////////////////////////////////////////////
//Класс, определяющий точку на плоскости
///////////////////////////////////////////////////////////
class Point {
public:
	POINTTYPE x;	//координаты точки
	POINTTYPE y;
	//конструктор
	Point(POINTTYPE _x=0.0,POINTTYPE _y=0.0);
	//операторы класса
	POINTTYPE operator[] (int);
	int operator== (Point&);
	int operator!= (Point&);
	int operator< (Point&);
	int operator> (Point&);
	Point	 operator+(Point&);
};

///////////////////////////////////////////////////////////
//Класс, определяющий прямоугольник на плоскости
///////////////////////////////////////////////////////////
class Rect {
public:
	Point sw;	//точка нижнего левого угла прямоугольника
	Point ne;	//точка верхнего правого угла прямоугольника
	//конструктор
	Rect(Point &sw,Point &ne);
	//операторы преобразования
	operator CRect();
};

///////////////////////////////////////////////////////////
//Класс, определяющий узел элемента списка List
///////////////////////////////////////////////////////////
class List;

class ListNode {
private:
	ListNode *m_next;            //указатель на следующий элемент	
	ListNode *m_prev;			 //указатель на предшествующий элемент
	ELEMENT  m_val;			 //содержит значение данного элемента списка
public:
	ListNode *Next(void);		 //переход на следующий элемент
	ListNode *Prev(void);		 //переход на предшествующий элемент
	ListNode *Insert(ListNode*); //вставка нового элемента
	ListNode *Remove(void);		 //удаление элемента

	//конструктор
	ListNode(ELEMENT &var=ELEMENT());
	ListNode(ListNode &rhs) { VERIFY(0); }
	//деструктор
	virtual ~ListNode();
	
	friend class List;
};

///////////////////////////////////////////////////////////
//Класс, определяющий двунаправленный связаный список
///////////////////////////////////////////////////////////
class List {
private:
	ListNode *m_header;	//указатель на головной элемент списка
	ListNode *m_current;//указатель на текущий элемент списка
	int		  m_lenght;	//указывает текущее количество элементов списка
public:
	//конструктор
	List(void);
	//конструктор копий
	List(List&);
	//оператор присваивания
	List& operator =(List&);
	//деструктор
	~List(void);
	//оператор обращения к точке по индексу
	ELEMENT operator[](int i);

	//операции над элементами списка:
	void Insert (ELEMENT&);	  //вставка нового элемента
	void Append (ELEMENT&);	  //добавление нового элемента в конец списка
	void Prepend(ELEMENT&);	  //добавление нового элемента в начало списка
	void Remove(void);		  //удаление текущего элемента
	void  Val(ELEMENT& val);	  //инициализация текущего элемента списка
	ELEMENT *Val (void);		  //получение значения текущего элемента списка
	ELEMENT *Next(void);          //переход на следующий элемент списка
	ELEMENT *Prev(void);	      //переход на предшествующий элемент списка
	ELEMENT *First(void);	      //переход на первый элемент списка
	ELEMENT *Last (void);	      //переход на последний элемент списка
	int Lenght (void);            //получение количества элементов в списке
	int isFirst(void);            //проверка: является ли текущий элемент списка первым
	int isLast (void);            //проверка: является ли текущий элемент списка последним
	int isHead (void);            //проверка: является ли текущий элемент списка головным

	ListNode *GetCurrentNode();
};

#endif


Соседние файлы в папке src