Отправляет email-рассылки с помощью сервиса Sendsay

Инвестирование с нуля

  Все выпуски  

Программирование на Си и С++ с нуля 154) модули


Школа программирования

154) Программирование на С++: модули

Модули напоминают формы в том смысле, что каждая форма в проекте представлена в виде отдельного набора файлов, описывающих ее структуру и поведение. Модуль - это так же отдельный файл с исходными текстами, и некоторые элементы (как правило, функции), описанные в этом файле, могут использоваться в других модулях. Таким образом, в частности, создаются стандартные библиотеки - в файле .CPP определяются функции, заголовки этих функций описываются в заголовочном файле .H, после чего файл .CPP можно скомпилировать, преобразовать в двоичный библиотечный формат .LIB (или промежуточный объектный .OBJ) и подключать к другим проектам. А можно и исходные тексты поставлять, это проще всего.

В выпуске 150 мы изучали, как сделать функцию виртуального кубика. В оригинальном варианте данный подход плох тем, что когда мы создадим новый проект, придется вручную копировать текст этой функции в каждый файл, где она вызывается. А если таких функций не одна, а сотни?

Вынесем функцию VirtKyb в отдельный модуль. Сначала создадим новое приложение, разместим на форме кнопку и поле-метку. Создадим обработчик нажатия на кнопку, в котором будем вызывать виртуальный кубик:

  void __fastcall TForm1::Button1Click(TObject *Sender)
  {
   int Rez;
   Rez = VirtKyb( 6 ); // бросаем кубик с шестью гранями
   Label1->Caption = IntToStr(Rez); // выводим результат

  }

Однако в текущем файле функция VirtKyb не определена, и если вызывать компилятор, то возникнет ошибка. Мы реализуем эту функцию в отдельном модуле.

Дадим команду File - New - Unit (Файл - Создать - Модуль). В редакторе возникнет новый файл, по умолчанию он получит название Unit2.cpp. Исходно он пуст.

Запишем в этом файле реализацию функции VirtKyb. Вот полный текст файла unit2.cpp:

  //---------------------------------------------------------------------------

  #include <vcl.h> // добавлен вручную для подключения стандартных функций
  #pragma hdrstop

  #include "Unit2.h"

  //---------------------------------------------------------------------------

  #pragma package(smart_init)

  int VirtKyb( int grani )
  {
  int n;
  n = random( grani ) + 1;
  return n;
  }

Но хотя файл Unit2.cpp автоматически включен в текущий проект (это видно в менеджере проектов), функция VirtKyb, реализованная в нем, пока больше нигде не "видна", и о ее существовании никто не подозревает. При создании нового модуля на самом деле было сфомировано два файла: unit1.cpp и unit1.h. Второй файл, заголовочный, и предназначен для описания в нем заголовка функции (только заголовка, без исполнимого кода). Этот заголовочный файл надо дооформить и включать в другие файлы, где требуется функция VirtKyb.

Вот как будет выглядеть полный текст файла unit2.h:

  #ifndef Unit2H
  #define Unit2H

  int VirtKyb( int grani );

  #endif

Обратите внимание, что указан только заголовок функции, и следом за ним поставлена точка с запятой. Это стандартная возможность С++, предназначенная специально для разделения описаний функций и их реализации.

Наконец добавим команду подключения заголовочного файла в файл Uni1.cpp:

  #include "Unit1.h" // уже было
  #include "Unit2.h" // добавлено вручную

Теперь программа скомпилируется и запустится успешно.

Файлы Unit2.cpp и Unit2.h можно использовать в других проектах как собственную библиотеку. Можно их переименовать, только надо исправить команду include на новое имя файла.

Модули добавляются к проекту командой контекстного меню менеджера Add и выбором уже существующего модуля.


(c) 2004-2007 Сергей Бобровский bobrovsky as russianenterprisesolutions.com

Школа программирования с нуля
Все предыдущие выпуски базового курса всегда тут:
http://www.infiltration.ru/p/

Неофициальный сайт поддержки (со срочными вопросами - сюда):
www.prog-begin.net.ru.


Мои учебные курсы "Технологии Delphi / C++ / C#. Разработка приложений для бизнеса".
http://shop.piter.com/display.phtml?a_id=17681&web_ok=all

Все эти учебные курсы рассчитаны не только на разработчиков, но и на всех тех, кто хочет стать ИТ-менеджером. Для этого как минимум нужно иметь общее представление о современных технологиях разработки и их истории и владеть соответствующей терминологией.
В книгах описаны десятки технологий, каждой из которых посвящены отдельные книги. Таким образом, купив один учебный курс, вы существенно сэкономите :) В книгах полностью описаны:
- Delphi (версия 2006, полностью совместимая с Turbo Delphi) для обеих платформ - Win32 и .NET;
- C# (новый язык Microsoft, на котором базируется платформа .NET и все новые версии Windows);
- C++ для платформы Win32.
Охвачены также темы работы с файлами на этих платформах, создания файл-серверных, клиент-серверных, распределенных приложений, веб-программ (Indy, ASP.NET, веб-сервисы). Описаны языки SQL и OCL. Немало глав посвящены истории программирования и различных технологий. Особое внимание уделено созданию программ с помощью технологии ECO и языка моделирования UML - программы фактически рисуются, и теперь даже для создания корпоративных приложений и их переноса в Интернет не обязательно знать программирование!
Отдельная часть отведена технологиям организации групповой работы, управления требованиями, контроля версий, локализации и тестирования.
Тут подробнее про книги.

Мои книги, которые пока доступны в продаже:


Дизайн рассылки: Алексей Голубев - Web-дизайн и web-программирование


В избранное