Читаем QT 4: программирование GUI на С++ полностью

(Квадрат числа 64 равен 4096)

Чтобы скомпилировать программу, вы, возможно, попросите помощи у местного опытного программиста С++. Если это не удастся сделать, можете прочитать остальную часть приложения, ничего не компилируя, и воспользоваться инструкциями в главе 1 по компиляции вашего первого приложения C++/Qt. В Qt предусмотрены утилиты, позволяющие легко создавать приложения на любой платформе.

Вернемся к нашей программе. В реальном приложении, как правило, мы размещали бы прототип функции square() в отдельном файле и включали бы этот файл во все единицы компиляции, в которых вызывается эта функция. Такой файл называется заголовочным; он обычно имеет расширение .h (часто встречаются также расширения .hh, .hpp и .hxx). Если переделать наш пример, используя заголовочный файл, то можно было бы создать файл с именем square.h, который содержит следующие строки:

1 #ifndef SQUARE_H

2 #define SQUARE_H

3 double square(double);

4 #endif

В начале и в конце заголовочного файла задаются препроцессорные директивы (#ifndef, #define и #endif). Эти директивы гарантируют однократное выполнение заголовочного файла, даже если он несколько раз включается в одну и ту же единицу компиляции (такая ситуация возникает, когда одни заголовочные файлы включают в себя другие заголовочные файлы). По принятым соглашениям используемый для этого препроцессорный символ строится на основе имени файла (в нашем примере это символ SQUARE_H). Позже в этом приложении мы вернемся к рассмотрению препроцессора.

Новый файл main.cpp будет иметь следующий вид:

01 #include

02 #include

03 #include "square.h"

04 using namespace std;

05 int main(int argc, char *argv[])

06 {

07 if (argc != 2) {

08 cerr << "Usage: square " << endl;

09 return 1;

10 }

11 double n = strtod(argv[1], 0);

12 cout << "The square of " << argv[1] << " is " << square(n) << endl;

13 return 0;

14 }

Используемая в строке 3 директива #include разворачивает содержимое файла square.h. Директивы, начинающиеся с символа #, рассматриваются препроцессором С++ до фактической компиляции. В прежние дни препроцессор являлся отдельной программой, которую программист вызывал вручную перед выполнением компилятора. В современных компиляторах этап препроцессорной обработки выполняется автоматически.

Директивы #include в строках 1 и 2 разворачивают содержимое заголовочных файлов cstdlib и iostream, которые являются частью стандартной библиотеки С++. Стандартные заголовочные файлы не имеют суффикса .h. Угловые скобки вокруг имен файлов говорят о том, что заголовочные файлы располагаются в стандартном месте системы, в то время как кавычки заставляют компилятор просматривать текущий каталог. Директивы #include обычно собирают вместе и располагают в верхней части файла .cpp.

В отличие от файлов .cpp, заголовочные файлы сами по себе не являются единицей компиляции и не приводят к созданию объектных файлов. Они могут только содержать объявления, позволяющие различным единицам компиляции взаимодействовать друг с другом. Следовательно, было бы неправильно помещать реализацию функции square() в какой-нибудь заголовочный файл. Если бы мы это сделали в нашем примере, ничего плохого не случилось бы, потому что square.h включается только однажды, однако если бы мы включали square.h в несколько файлов .cpp, то получили бы несколько реализаций функции square() (по одной на каждый файл .cpp, который включает этот заголовочный файл). После этого компоновщик пожаловался бы на существование нескольких (идентичных) определений функции square() и отказался бы генерировать исполняемый модуль. И наоборот, если мы объявляем функцию, но нигде ее не реализуем, компоновщик пожалуется на наличие «неразрешенного символа».

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

• статические библиотеки непосредственно помещаются в исполняемый модуль, как будто они являются объектными файлами. Это гарантирует невозможность потери библиотеки, но увеличивает размер исполняемого модуля;

• динамические библиотеки (называемые также совместно используемыми библиотеками или библиотеками DLL) располагаются в стандартном месте на машине пользователя и автоматически загружаются во время запуска приложения.

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных