Новые книги

Вы – фрилансер или внештатный сотрудник? Трудитесь в компании удаленно, сидя за своим компьютером дома, и хотите повысить эффективность и скорость работы? Тогда эта книга – для вас. Она рассказывает о наиболее популярных средствах для совместной работы. С ее помощью вы научитесь использовать общую базу данных компании, в которой работаете, не выходя из дому. Вы узнаете, как управлять документами по сети, как совместно работать над проектами, организовывать видеоконференции, звонить в офис с помощью компьютера, как удобно и быстро получать через Интернет заработанные деньги.

Основное внимание в книге уделено трем продуктам: Windows SharePoint Services 3.0, Microsoft Office SharePoint Server 2007 (MOSS) и Citrix. Кроме того, рассматриваются и альтернативные средства.
Автор руководства — опытный интернет-предприниматель, открывший и раскрутивший 4 интернет-магазина разной тематики. В данном руководстве наиболее полно рассматриваются основные этапы создания магазина, начиная от идеи проекта до получения прибыли.

Читая данное руководство, вы шаг за шагом узнаете все тонкости открытия интернет-магазина.

Порождение объектов

5.3.2. Порождение объектов

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

	  Window::Window (Length x0, Length y0,
	                  Length width, Length height)
	  {
	     xmin = x0;  ymin = y0;
	     xmax = x0 + width; ymax = y0 + height;
	   }

При обращении к этому конструктору порождается новое окно с координатами нижнего левого угла (x0,y0), шириной width и высотой height. Наряду с рассмотренным в этом классе могут быть определены и другие конструкторы:

	Window (Length x0, Length y0);//берутся стандартные размеры окна
	Window ();                    //берутся стандартные размеры и положение окна

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

Чтобы разместить объект в статической памяти достаточно либо объявить его вне какой-либо функции, либо при его объявлении указать ключевое слово static. Статическая память выделяется компилятором во время компиляции программы и не меняется во время ее выполнения. Конструктор можно использовать для инициализации объектов, размещаемых в статической памяти (для выделения статической памяти под объект без его инициализации достаточно просто объявить его). Объявление

	Window main_window = Window(0.0, 0.0, 8.5, 11.0)

определяет статический объект main_window (основное окно), проинициализированный значениями параметров конструктора.

Локальные объекты, объявляемые внутри функций, размещаются в автоматической памяти (системном стеке). Их тоже можно инициализировать с помощью конструктора. Наконец, обращение к конструктору в операторе new в процессе выполнения программы порождает объект, размещаемый в динамической памяти. Например:

	Window *window = new Window (0.0, 0.0, 8.5, 11.0);

При этом выражение new Window (0.0, 0.0, 8.5, 11.0) имеет своим значением указатель на порожденный динамический объект.

Для терминации объектов можно использовать специальный метод, являющийся одним из членов класса и называемый деструктором. Как и конструктор, он имеет то же имя, что и имя класса, в котором он определен, но первым символом имени деструктора является тильда (~):

	  Window::~Window ();
	  {
	    //убрать окно и перекрасить освободившуюся область
	  }

Наконец, для освобождения динамической памяти от объектов, которые уже не нужны, используется операция delete, например:

	  delete window;

Необходимость использования операции delete связана с тем, что в системе C++ не производится сборки мусора, и программист должен сам заботиться об освобождении динамической памяти от ненужных объектов, чтобы избежать ее переполнения (в более современной системе программирования Java обеспечивается автоматическая сборка мусора, что существенно упрощает программирование).

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