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

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

Рис. Б.1. Процесс компиляции программы на С++ (в Windows).

При создании программы только одна единица компиляции должна иметь функцию main(), которая является точкой входа в программу. Эта функция не принадлежит никакому классу — она является глобальной функцией.

В отличие от Java, где каждый исходный файл должен содержать точно один класс, С++ позволяет организовать единицу компиляции удобным для нас способом. Можно реализовать несколько классов в одном файле .cpp или распространить реализацию класса на несколько файлов .cpp; имена исходных файлов могут быть любыми. При внесении изменений в один конкретный файл .cpp потребуется перекомпилировать этот файл и затем повторно скомпоновать приложение для создания нового исполняемого модуля.

Прежде чем мы пойдем дальше, давайте рассмотрим очень простую программу на С++, вычисляющую квадрат целого числа. Эта программа состоит из двух единиц компиляции: main.cpp и square.cpp.

Ниже показан файл square.cpp:

01 double square(double n)

02 {

03 return n * n;

04 }

Этот файл содержит лишь глобальную функцию с именем square(), которая возвращает квадрат своего параметра.

Ниже показан файл main.cpp:

01 #include

02 #include

03 using namespace std;

04 double square(double);

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 }

Исходный файл main.cpp содержит определение функции main(). В С++ эта функция принимает в качестве параметров int и char * (массив символьных строк). Имя программы находится в argv[0], а аргументы командной строки — в argv[1], argv[2], … argv[argc — 1]. Параметры имеют стандартные имена argc («argument count» — количество аргументов) и argv («argument values» — значения аргументов). Если программа не использует аргументы командной строки, функцию main() можно определить без параметров.

Функция main() использует из стандартной библиотеки С++ функции strtod() («string to double» — преобразование строки в переменную двойной точности), cout (стандартный поток вывода С++) и cerr (стандартный поток вывода сообщений об ошибках С++) для преобразования аргумента командной строки в тип double и для вывода текста на консоль. Строки, числа и маркеры конца строки (endl) выводятся с помощью оператора <<, который также используется для сдвига битов. Чтобы воспользоваться этой стандартной функциональностью, необходимо включить директивы #include, расположенные в строках 1 и 2.

Директива using namespace в строке 3 указывает компилятору на то, что мы хотим импортировать в глобальное пространство имен все идентификаторы, объявленные в пространстве имен std. Это позволяет нам пользоваться записью strtod(), cout, cerr и endl вместо указания полных имен: std::strtod(), std::cout, std::cerr и std::endl. В С++ оператор :: разделяет компоненты сложного имени.

В строке 4 объявляется прототип функции. Он указывает компилятору на то, что существует функция с данными параметрами и возвращаемым значением. Реальное определение функции может находиться в той же или в другой единице компиляции. Без прототипа функции компилятор не позволил бы нам вызвать эту функцию в строке 12. Имена параметров функции указывать необязательно.

Процедура компиляции программы зависит от платформы. Например, для компиляции программы в Solaris с использованием компилятора С++ компании «Sun» мы могли бы задать следующие команды:

CC -с main.cpp

CC -с square.cpp

ld main.o square.o -о square

Первые две строки вызывают компилятор, чтобы сгенерировать файлы для соответствующих файлов .cpp. Третья строка вызывает компоновщик и формирует исполняемый модуль с именем square, который может запускаться следующим образом:

./square 64

Эта программа выводит на консоль следующее сообщение:

The square of 64 is 4096

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

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

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

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

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

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

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

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

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