Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Конференция «Технологии управления данными 2018»
СУБД, платформы, инструменты, реальные проекты.
29 ноября 2018 г.

5.5.1. Преобразование классов в структуры данных

В языке C класс можно рассматривать как тип структуры, определенный в этом языке: поля структуры соответствуют атрибутам класса (при этом каждый атрибут может иметь простой, либо составной тип, т.е. тип структуры или массива). В таком случае каждый объект некоторого класса будет представлен конкретной структурой, экземпляром соответствующего типа структуры.

Методы реализуются в виде набора функций, описания которых можно указать в комментарии при определении типа структуры, определяющего описываемый класс. Программист должен сам следить за тем, чтобы при работе с экземплярами этого типа структуры использовались для доступа к ее полям только функции, перечисленные в указанном комментарии. В языке C++ это автоматически отслеживается компилятором и его подсистемой поддержки выполнения программ. Все функции, соответствующие методам, имеют дополнительный параметр, определяющий экземпляр структуры (объект), к которому применяется метод. В языке C++ этот параметр автоматически подставляется компилятором.

Например, класс Window можно представить как следующую структуру (struct) языка C:


	struct Window

	{

	/* структура соответствует классу 

	 * class Window

	* для которого определены следующие методы (все методы имеют

	* дополнительный параметр, Window* this, определяющий экземпляр

	* структуры (объект), к которому применяется метод):

	 * public:

	 * Window(Length x0, Length y0, Length width, Length height,

	*        Window* this);

	 * D_Window (Window* this); -- соответствует деструктору ~Window()

	* void add_box (Length x, Length y, Length width, Length height,

	*               Window* this);

	* void add_circle (Length x, Length y, Length radius, Window* this);

	* void clear_selections (Window* this);

	* void cut_selections (Window* this);

	* Group* group_selections (Window* this);

	* void move_selections (Length deltax, Length deltay, Window* this);

	* void redraw_all (Window* this);

	* void select_item (Length x, Length y, Window* this);

	* void ungroup_selections (Window* this);

	* private:

	* void add_to_selections (Shape* shape, Window* this);

	 */

	  Length xmin;

	  Length ymin;

	  Length xmax;

	  Length ymax;

	};

	При этом предполагается, что тип Length введен через

	  typedef floast Length;

	Ссылки на объекты класса Window реализуются как указатели языка C:

	  struct Window* window;

	  Length x1 = window->xmin;

Объект может быть при этом размещен статически, автоматически (в стеке), или динамически (в куче).

Назад | Содержание | Вперед

Новости мира IT:

Архив новостей

Последние комментарии:

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 985 1945361
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2015 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...